feat(checker): type check slice expressions
This commit is contained in:
@@ -29,6 +29,7 @@ def define_builtins(reg: TypesRegistry):
|
||||
int = reg.define_type("int", BaseType(name="int"))
|
||||
float = reg.define_type("float", BaseType(name="float"))
|
||||
str = reg.define_type("str", BaseType(name="str"))
|
||||
slice = reg.define_type("slice", BaseType(name="slice"))
|
||||
|
||||
list = reg.define_type(
|
||||
"list",
|
||||
|
||||
@@ -507,6 +507,9 @@ class PythonTyper(
|
||||
expr.location, operation, [(expr.index, index)], {}
|
||||
)
|
||||
|
||||
def visit_slice_expr(self, expr: p.SliceExpr) -> Type:
|
||||
return self.types.get_type("slice")
|
||||
|
||||
def visit_base_type(self, node: p.BaseType) -> Type:
|
||||
base: Type
|
||||
try:
|
||||
|
||||
@@ -200,3 +200,11 @@ class Resolver(p.Stmt.Visitor[None], p.Expr.Visitor[None]):
|
||||
def visit_subscript_expr(self, expr: p.SubscriptExpr) -> None:
|
||||
self.resolve(expr.object)
|
||||
self.resolve(expr.index)
|
||||
|
||||
def visit_slice_expr(self, expr: p.SliceExpr) -> None:
|
||||
if expr.lower is not None:
|
||||
self.resolve(expr.lower)
|
||||
if expr.upper is not None:
|
||||
self.resolve(expr.upper)
|
||||
if expr.step is not None:
|
||||
self.resolve(expr.step)
|
||||
|
||||
Reference in New Issue
Block a user