feat(checker): evaluate literal cast to list/dict
This commit is contained in:
@@ -941,6 +941,40 @@ class PythonTyper(
|
|||||||
expr, subject_type, base, lit_value
|
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):
|
case AppliedType(body=body):
|
||||||
return self._evaluate_cast_statically(
|
return self._evaluate_cast_statically(
|
||||||
expr, subject_type, body, lit_value
|
expr, subject_type, body, lit_value
|
||||||
|
|||||||
Reference in New Issue
Block a user