feat(checker): evaluate literal cast to list/dict

This commit is contained in:
2026-07-01 14:05:35 +02:00
parent 14007db846
commit 8fc5ab623e

View File

@@ -941,6 +941,40 @@ class PythonTyper(
expr, subject_type, base, lit_value
)
case AppliedType(name="list", args=[item_type]) if isinstance(
lit_value, list
):
match subject_type:
case AppliedType(name="list", args=[lit_item_type]):
evaluated: bool = True
for item in lit_value:
if not self._evaluate_cast_statically(
expr, lit_item_type, item_type, item
):
evaluated = False
return evaluated
case _:
return False
case AppliedType(name="dict", args=[key_type, value_type]) if isinstance(
lit_value, dict
):
match subject_type:
case AppliedType(name="dict", args=[lit_key_type, lit_value_type]):
evaluated: bool = True
for key, value in lit_value.items():
if not self._evaluate_cast_statically(
expr, lit_key_type, key_type, key
):
evaluated = False
if not self._evaluate_cast_statically(
expr, lit_value_type, value_type, value
):
evaluated = False
return evaluated
case _:
return False
case AppliedType(body=body):
return self._evaluate_cast_statically(
expr, subject_type, body, lit_value