Source code for pylasu.validation.validation

import enum
from dataclasses import dataclass, field
from typing import List

from pylasu.model import Position, Node


[docs] class IssueType(enum.Enum): LEXICAL = 0 SYNTACTIC = 1 SEMANTIC = 2
[docs] class IssueSeverity(enum.Enum): ERROR = 30 WARNING = 20 INFO = 10
[docs] @dataclass class Issue: type: IssueType message: str severity: IssueSeverity = IssueSeverity.ERROR position: Position = None def __str__(self): msg = f"{self.severity.name.capitalize()} ({self.type.name.lower()}): {self.message}" if self.position: msg += f" @ {self.position}" return msg
[docs] @staticmethod def lexical(message: str, severity: IssueSeverity = IssueSeverity.ERROR, position: Position = None): return Issue(IssueType.LEXICAL, message, severity, position)
[docs] @staticmethod def syntactic(message: str, severity: IssueSeverity = IssueSeverity.ERROR, position: Position = None): return Issue(IssueType.SYNTACTIC, message, severity, position)
[docs] @staticmethod def semantic(message: str, severity: IssueSeverity = IssueSeverity.ERROR, position: Position = None): return Issue(IssueType.SEMANTIC, message, severity, position)
[docs] @dataclass class WithIssues: """Many classes have the necessity of tracking issues""" issues: List[Issue] = field(default_factory=list, init=False)
[docs] @dataclass class Result(WithIssues): root: Node