fix(checker): properly check parameter defaults

This commit is contained in:
2026-07-06 17:15:59 +02:00
parent 164648e8df
commit aab4641584
2 changed files with 20 additions and 3 deletions

View File

@@ -335,10 +335,23 @@ class PythonTyper(
kw: list[Function.Parameter] = []
def eval_param_type(param: p.Function.Parameter) -> Type:
if param.type is not None:
return self.resolve_type_expr(param.type)
default_type: Optional[Type] = None
if param.default is not None:
return self.type_of(param.default)
default_type = self.type_of(param.default)
if param.type is not None:
param_type: Type = self.resolve_type_expr(param.type)
if default_type is not None:
if not self.types.is_subtype(default_type, param_type):
self.reporter.error(
param.location or stmt.location,
f"Cannot use default value of type {default_type} for parameter of type {param_type}",
)
return param_type
if default_type is not None:
return default_type
return UnknownType()
position: int = 0

View File

@@ -101,6 +101,10 @@ class Resolver(p.Stmt.Visitor[None], p.Expr.Visitor[None]):
function (p.Function): the function to resolve
"""
self.begin_scope()
for param in function.params.all:
if param.default is not None:
self.resolve(param.default)
for param in function.params.all:
self.declare(param.name)
self.define(param.name)