Skip to content

blocks

Handle modules, blocks, and local variable declarations during declaration analysis.

Classes:

DeclarationBlockVisitorMixin

Bases: SemanticVisitorMixinBase

Methods:

visit

visit(node: InlineVariableDeclaration) -> None
Source code in packages/irx/src/irx/analysis/handlers/_declarations/blocks.py
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
@SemanticAnalyzerCore.visit.dispatch
def visit(self, node: astx.InlineVariableDeclaration) -> None:
    """
    title: Visit InlineVariableDeclaration nodes.
    parameters:
      node:
        type: astx.InlineVariableDeclaration
    """
    self._resolve_declared_type(node.type_, node=node)
    if node.value is not None and not isinstance(
        node.value, astx.Undefined
    ):
        self.visit(node.value)
        if self._require_value_expression(
            node.value,
            context=f"Initializer for '{node.name}'",
        ):
            validate_assignment(
                self.context.diagnostics,
                target_name=node.name,
                target_type=node.type_,
                value_type=self._expr_type(node.value),
                node=node,
            )
    symbol = self.registry.declare_local(
        node.name,
        node.type_,
        is_mutable=node.mutability != astx.MutabilityKind.constant,
        declaration=node,
    )
    self._set_symbol(node, symbol)