When inferring comparison operators, return a definite type instead of NO_VALUES for the in/not in operator

This commit is contained in:
wutingjia
2024-07-09 20:30:00 +08:00
parent 82d1902f38
commit 4d09ac07e4
3 changed files with 12 additions and 1 deletions

View File

@@ -64,6 +64,7 @@ Code Contributors
- Joseph Birkner (@josephbirkner)
- Márcio Mazza (@marciomazza)
- Martin Vielsmaier (@moser) <martin@vielsmaier.net>
- TingJia Wu (@WutingjiaX) <wutingjia@bytedance.com>
And a few more "anonymous" contributors.

View File

@@ -645,7 +645,10 @@ def _infer_comparison_part(inference_state, context, left, operator, right):
_bool_to_value(inference_state, False)
])
elif str_operator in ('in', 'not in'):
return NO_VALUES
return ValueSet([
_bool_to_value(inference_state, True),
_bool_to_value(inference_state, False)
])
def check(obj):
"""Checks if a Jedi object is either a float or an int."""

View File

@@ -424,3 +424,10 @@ with open("a"), open("b") as bfile:
some_array = ['', '']
#! ['def upper']
some_array[some_not_defined_index].upper
# -----------------
# operator
# -----------------
#? bool()
res = 'f' in 'foo'; res