From 8fc5ab623e2016874ae72a5811a678e20dd102ef Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Wed, 1 Jul 2026 14:05:35 +0200 Subject: [PATCH] feat(checker): evaluate literal cast to list/dict --- midas/checker/python.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/midas/checker/python.py b/midas/checker/python.py index 647c312..e58dac7 100644 --- a/midas/checker/python.py +++ b/midas/checker/python.py @@ -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