"""ValidatorState class."""
from typing import TYPE_CHECKING
from text_lint.exceptions.validators import ValidationFailure
from text_lint.utilities.whitespace import new_line
from .bases.state_base import StateBase
if TYPE_CHECKING: # no cover
from text_lint.linter import Linter
from text_lint.operations.validators.args.lookup_expression import (
LookupExpression,
)
from text_lint.operations.validators.bases.validator_base import (
ValidatorBase,
)
from text_lint.results.forest import AliasLookupResult
from text_lint.results.tree import ResultTree
[docs]
class ValidatorState(StateBase):
"""State for validator operations."""
operation: "ValidatorBase"
[docs]
def __init__(self, linter: "Linter") -> None:
"""Initialize ValidatorState instances.
:param linter: The linter instance being encapsulated.
"""
super().__init__(linter)
self.operation = self._linter.validators.last
[docs]
def fail(
self,
translated_description: str,
translated_detail: str,
) -> None:
"""Raise an exception indicating an operation has failed.
:param translated_description: A translated description of the failure.
:param translated_detail: Translated details of the failure.
"""
raise ValidationFailure(
description=new_line(translated_description),
detail=new_line(translated_detail),
validator=self.operation
)
[docs]
def lookup_expression(
self,
lookup_expression: "LookupExpression",
) -> "AliasLookupResult":
"""Perform the given lookup expression.
:param lookup_expression: The lookup expression to execute.
:returns: The calculated lookup result.
"""
return self._linter.forest.lookup_expression(
self._linter,
lookup_expression,
)
[docs]
def save(self, tree: "ResultTree") -> None:
"""Save the given result tree.
:param tree: The result tree to save in the result forest.
"""
self._linter.forest.add(tree)