Skip to content

base

Hold analyzer state, semantic sidecar helpers, and shared traversal utilities that specialized visitor mixins build on.

Classes:

SemanticAnalyzerCore

SemanticAnalyzerCore(
    *,
    context: SemanticContext | None = None,
    session: CompilationSession | None = None,
)

Bases: BaseVisitor

Provide shared semantic-analysis state and helper behavior for the specialized visitor mixins that implement node-specific rules. attributes: context: type: SemanticContext session: type: CompilationSession | None factory: type: SemanticEntityFactory registry: type: SemanticRegistry bindings: type: VisibleBindings

Methods:

Source code in packages/irx/src/irx/analysis/handlers/base.py
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
def __init__(
    self,
    *,
    context: SemanticContext | None = None,
    session: CompilationSession | None = None,
) -> None:
    """
    title: Initialize SemanticAnalyzerCore.
    parameters:
      context:
        type: SemanticContext | None
      session:
        type: CompilationSession | None
    """
    self.session = session
    self.context = context or SemanticContext()
    if session is not None:
        self.context.diagnostics = session.diagnostics
    self.factory = SemanticEntityFactory(self.context)
    self.registry = SemanticRegistry(self.context, self.factory)
    self.bindings = VisibleBindings(
        context=self.context,
        factory=self.factory,
        bindings=(
            session.visible_bindings if session is not None else None
        ),
    )

analyze

analyze(node: AST) -> AST
Source code in packages/irx/src/irx/analysis/handlers/base.py
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
def analyze(self, node: astx.AST) -> astx.AST:
    """
    title: Analyze one AST root.
    parameters:
      node:
        type: astx.AST
    returns:
      type: astx.AST
    """
    if isinstance(node, astx.Module):
        parsed_module = ParsedModule(node.name, node)
        self.analyze_parsed_module(parsed_module, predeclared=False)
    else:
        with self.context.scope("module"):
            self.visit(node)
    self.context.diagnostics.raise_if_errors()
    return node

analyze_parsed_module

analyze_parsed_module(
    parsed_module: ParsedModule, *, predeclared: bool
) -> Module
Source code in packages/irx/src/irx/analysis/handlers/base.py
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
def analyze_parsed_module(
    self,
    parsed_module: ParsedModule,
    *,
    predeclared: bool,
) -> astx.Module:
    """
    title: Analyze one parsed module.
    parameters:
      parsed_module:
        type: ParsedModule
      predeclared:
        type: bool
    returns:
      type: astx.Module
    """
    if not predeclared:
        reset_templates = getattr(
            self,
            "_reset_template_analysis_state",
            None,
        )
        if callable(reset_templates):
            reset_templates(parsed_module.ast)
    with self.context.in_module(parsed_module.key):
        self._visit_module(parsed_module.ast, predeclared=predeclared)
    return parsed_module.ast

visit

visit(node: AST) -> None
Source code in packages/irx/src/irx/analysis/handlers/base.py
1861
1862
1863
1864
1865
1866
1867
1868
1869
@dispatch
def visit(self, node: astx.AST) -> None:
    """
    title: Visit generic AST nodes.
    parameters:
      node:
        type: astx.AST
    """
    self._visit_plain_typed_node(node)

SemanticVisitorMixinRuntimeBase

SemanticVisitorMixinTypingBase

Methods:

visit

visit(node: AST) -> None
Source code in packages/irx/src/irx/analysis/handlers/base.py
79
80
81
82
83
84
85
86
def visit(self, node: astx.AST) -> None:
    """
    title: Visit AST nodes.
    parameters:
      node:
        type: astx.AST
    """
    raise NotImplementedError