1
0
forked from VimPlug/jedi

Make version_info understandable so it can be used in for typeshed

This commit is contained in:
Dave Halter
2018-10-30 23:31:57 +01:00
parent 3581ce7059
commit f2d67f4a5d
2 changed files with 37 additions and 0 deletions

View File

@@ -434,6 +434,26 @@ def _bool_to_context(evaluator, bool_):
return compiled.builtin_from_name(evaluator, force_unicode(str(bool_)))
def _get_tuple_ints(context):
if not isinstance(context, iterable.SequenceLiteralContext):
return None
numbers = []
for lazy_context in context.py__iter__():
result = lazy_context.infer()
try:
number, = result # Must be exactly one element
except ValueError:
return None
if not isinstance(number, compiled.CompiledValue):
return None
value = number.get_safe_value()
if not isinstance(value, int):
return None
numbers.append(value)
return numbers
def _eval_comparison_part(evaluator, context, left, operator, right):
l_is_num = is_number(left)
r_is_num = is_number(right)
@@ -474,6 +494,16 @@ def _eval_comparison_part(evaluator, context, left, operator, right):
bool_ = operation(left, right)
return ContextSet([_bool_to_context(evaluator, bool_)])
from jedi.plugins.typeshed import VersionInfo
if isinstance(left, VersionInfo):
version_info = _get_tuple_ints(right)
if version_info is not None:
bool_result = compiled.access.COMPARISON_OPERATORS[operator](
evaluator.environment.version_info,
tuple(version_info)
)
return ContextSet([_bool_to_context(evaluator, bool_result)])
return ContextSet([_bool_to_context(evaluator, True), _bool_to_context(evaluator, False)])
elif str_operator == 'in':
return NO_CONTEXTS