From 0a8e0fb6c2a6b82393eed6129c5cb319fc7f5dcf Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Tue, 16 Jun 2026 10:39:26 +0200 Subject: [PATCH] feat(checker): handle raw expr/stmt --- midas/checker/python.py | 6 ++++++ midas/checker/resolver.py | 6 ++++++ midas/generator/generator.py | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/midas/checker/python.py b/midas/checker/python.py index 316836e..9af8e73 100644 --- a/midas/checker/python.py +++ b/midas/checker/python.py @@ -370,6 +370,9 @@ class PythonTyper( if body_returned: raise ReturnException() + def visit_raw_stmt(self, stmt: p.RawStmt) -> None: + pass + def visit_binary_expr(self, expr: p.BinaryExpr) -> Type: method: Optional[str] = OPERATOR_METHODS.get(expr.operator.__class__) if method is None: @@ -566,6 +569,9 @@ class PythonTyper( def visit_slice_expr(self, expr: p.SliceExpr) -> Type: return self.types.get_type("slice") + def visit_raw_expr(self, expr: p.RawExpr) -> Type: + return UnknownType() + def visit_base_type(self, node: p.BaseType) -> Type: base: Type try: diff --git a/midas/checker/resolver.py b/midas/checker/resolver.py index c99a18d..3226faf 100644 --- a/midas/checker/resolver.py +++ b/midas/checker/resolver.py @@ -163,6 +163,9 @@ class Resolver(p.Stmt.Visitor[None], p.Expr.Visitor[None]): self.resolve(*stmt.body) self.end_scope() + def visit_raw_stmt(self, stmt: p.RawStmt) -> None: + pass + def visit_binary_expr(self, expr: p.BinaryExpr) -> None: self.resolve(expr.left) self.resolve(expr.right) @@ -221,3 +224,6 @@ class Resolver(p.Stmt.Visitor[None], p.Expr.Visitor[None]): self.resolve(expr.upper) if expr.step is not None: self.resolve(expr.step) + + def visit_raw_expr(self, expr: p.RawExpr) -> None: + pass diff --git a/midas/generator/generator.py b/midas/generator/generator.py index bef6e16..ddab606 100644 --- a/midas/generator/generator.py +++ b/midas/generator/generator.py @@ -108,6 +108,9 @@ class Generator(p.Stmt.Visitor[ast.stmt], p.Expr.Visitor[ast.expr]): step=expr.step.accept(self) if expr.step is not None else None, ) + def visit_raw_expr(self, expr: p.RawExpr) -> ast.expr: + return expr.expr + def visit_expression_stmt(self, stmt: p.ExpressionStmt) -> ast.stmt: return ast.Expr( value=stmt.expr.accept(self), @@ -169,5 +172,8 @@ class Generator(p.Stmt.Visitor[ast.stmt], p.Expr.Visitor[ast.expr]): orelse=[], ) + def visit_raw_stmt(self, stmt: p.RawStmt) -> ast.stmt: + return stmt.stmt + def _visit_body(self, stmts: list[p.Stmt]) -> list[ast.stmt]: return [stmt.accept(self) for stmt in stmts]