fix: add final decorator to Visitor subclasses

This commit is contained in:
2026-07-09 18:30:06 +02:00
parent f41dbb528c
commit 88ab9dc14d
12 changed files with 29 additions and 8 deletions

View File

@@ -1,6 +1,9 @@
from typing import final
import midas.ast.midas as m
@final
class MidasPrinter(
m.Expr.Visitor[str],
m.Stmt.Visitor[str],

View File

@@ -1,7 +1,10 @@
from typing import final
import midas.ast.midas as m
from midas.ast.printer.base import AstPrinter
@final
class MidasAstPrinter(
AstPrinter,
m.Expr.Visitor[None],

View File

@@ -1,9 +1,11 @@
import ast
from typing import final
import midas.ast.python as p
from midas.ast.printer.base import AstPrinter
@final
class PythonAstPrinter(
AstPrinter,
p.MidasType.Visitor[None],

View File

@@ -1,5 +1,5 @@
from dataclasses import dataclass
from typing import Any, Callable, Optional
from typing import Any, Callable, Optional, final
import midas.ast.midas as m
from midas.ast.location import Location
@@ -18,6 +18,7 @@ class PartialPredicate(Predicate):
"""A dictionary of already applied parameters"""
@final
class Evaluator(m.Expr.Visitor[Any]):
"""Helper class to evaluate an expression

View File

@@ -1,6 +1,6 @@
import logging
from pathlib import Path
from typing import Optional
from typing import Optional, final
import midas.ast.midas as m
from midas.ast.location import Location
@@ -30,6 +30,7 @@ from midas.lexer.token import Token, TokenType
from midas.parser.midas import MidasParser
@final
class MidasTyper(m.Stmt.Visitor[None], m.Expr.Visitor[Type], m.Type.Visitor[Type]):
"""A resolver which evaluates Midas type definitions and build a registry"""

View File

@@ -1,6 +1,6 @@
import ast
import logging
from typing import Any, Optional
from typing import Any, Optional, final
import midas.ast.python as p
from midas.ast.location import Location
@@ -55,6 +55,7 @@ class UndefinedMethodException(Exception):
pass
@final
class PythonTyper(
p.Stmt.Visitor[None],
p.Expr.Visitor[Type],

View File

@@ -1,3 +1,5 @@
from typing import final
import midas.ast.python as p
from midas.ast.location import Location
from midas.checker.reporter import FileReporter
@@ -6,6 +8,7 @@ from midas.checker.reporter import FileReporter
class ResolverError(Exception): ...
@final
class Resolver(p.Stmt.Visitor[None], p.Expr.Visitor[None]):
"""A variable assignment and reference resolver

View File

@@ -3,7 +3,7 @@ from __future__ import annotations
from abc import ABC, abstractmethod
from dataclasses import dataclass
from pathlib import Path
from typing import Generic, Optional, Protocol, TextIO, TypeVar
from typing import Generic, Optional, Protocol, TextIO, TypeVar, final
import midas.ast.midas as m
import midas.ast.python as p
@@ -121,6 +121,7 @@ class Highlighter(ABC):
self.openings.setdefault((l + 1, 0), []).append(opening)
@final
class PythonHighlighter(
Highlighter,
p.MidasType.Visitor[None],
@@ -255,6 +256,7 @@ class PythonHighlighter(
def visit_raw_stmt(self, stmt: p.RawStmt) -> None: ...
@final
class MidasHighlighter(
Highlighter, m.Stmt.Visitor[None], m.Expr.Visitor[None], m.Type.Visitor[None]
):
@@ -352,6 +354,7 @@ class MidasHighlighter(
self.wrap(column, "column")
@final
class DiagnosticsHighlighter(Highlighter):
EXTRA_CSS_PATH: Optional[Path] = Path(__file__).parent / "hl_diagnostic.css"

View File

@@ -1,5 +1,5 @@
import ast
from typing import Optional
from typing import Optional, final
import midas.ast.midas as m
from midas.checker.registry import TypesRegistry
@@ -39,6 +39,7 @@ COMPARISON_OPERATORS: dict[TokenType, type[ast.cmpop]] = {
}
@final
class ConstraintGenerator(m.Expr.Visitor[ast.expr]):
"""Class to generate Python code for constraint expressions"""

View File

@@ -3,7 +3,7 @@ import logging
import shutil
from dataclasses import dataclass, field
from pathlib import Path
from typing import Optional, assert_never
from typing import Optional, assert_never, final
import midas.ast.midas as m
import midas.ast.python as p
@@ -47,6 +47,7 @@ class Scope:
"""A list of aliases defined in the scope, that can be discard afterwards"""
@final
class Generator(p.Stmt.Visitor[ast.stmt], p.Expr.Visitor[ast.expr]):
"""
A class to translate the custom Python AST back into raw `ast` nodes

View File

@@ -1,4 +1,4 @@
from typing import Optional, Sequence
from typing import Optional, Sequence, final
from midas.ast.midas import (
AliasStmt,
@@ -28,6 +28,7 @@ from midas.ast.midas import (
)
@final
class MidasAstJsonSerializer(
Stmt.Visitor[dict], Expr.Visitor[dict], Type.Visitor[dict]
):

View File

@@ -1,5 +1,5 @@
import ast
from typing import Optional, Sequence, Type
from typing import Optional, Sequence, Type, final
from midas.ast.python import (
AssignStmt,
@@ -78,6 +78,7 @@ boolean_ops: dict[Type[ast.boolop], str] = {
}
@final
class PythonAstJsonSerializer(
Stmt.Visitor[dict], Expr.Visitor[dict], MidasType.Visitor[dict]
):