forked from VimPlug/jedi
Rewrote the isistance implementation, so that it works properly with tuples as well as normal classes.
This commit is contained in:
@@ -125,28 +125,29 @@ def builtins_reversed(evaluator, obj, params):
|
||||
|
||||
|
||||
def builtins_isinstance(evaluator, obj, params):
|
||||
any_bool = [compiled.false_obj, compiled.true_obj]
|
||||
obj = _follow_param(evaluator, params, 0)
|
||||
raw_classes = _follow_param(evaluator, params, 1)
|
||||
classes = []
|
||||
# Check for tuples.
|
||||
for cls_or_tup in raw_classes:
|
||||
if cls_or_tup.is_class():
|
||||
classes.append(cls_or_tup)
|
||||
else:
|
||||
classes += iterable.get_iterator_types([cls_or_tup])
|
||||
|
||||
bool_results = []
|
||||
bool_results = set([])
|
||||
for o in obj:
|
||||
for cls in classes:
|
||||
try:
|
||||
mro_func = o.py__class__(evaluator).py__mro__
|
||||
except AttributeError:
|
||||
return any_bool
|
||||
# This is temporary. Everything should have a class attribute in
|
||||
# Python?! Maybe we'll leave it here, because some numpy objects or
|
||||
# whatever might not.
|
||||
return [compiled.true_obj, compiled.false_obj]
|
||||
|
||||
mro = mro_func(evaluator)
|
||||
|
||||
for cls_or_tup in raw_classes:
|
||||
if cls_or_tup.is_class():
|
||||
bool_results.add(cls_or_tup in mro)
|
||||
else:
|
||||
bool_result = cls in mro_func(evaluator)
|
||||
bool_results.append(compiled.keyword_from_value(bool_result))
|
||||
return set(bool_results)
|
||||
# Check for tuples.
|
||||
classes = iterable.get_iterator_types([cls_or_tup])
|
||||
bool_results.add(any(cls in mro for cls in classes))
|
||||
|
||||
return [compiled.keyword_from_value(x) for x in bool_results]
|
||||
|
||||
|
||||
def collections_namedtuple(evaluator, obj, params):
|
||||
|
||||
@@ -162,7 +162,7 @@ def isinst(x):
|
||||
return dict
|
||||
elif isinstance(x, int) and x == 1 or x is True:
|
||||
return set
|
||||
elif isinstance(x, (float, tuple)):
|
||||
elif isinstance(x, (float, reversed)):
|
||||
return list
|
||||
elif not isinstance(x, str):
|
||||
return tuple
|
||||
@@ -174,11 +174,11 @@ isinst(A())
|
||||
isinst(True)
|
||||
#? set
|
||||
isinst(1)
|
||||
#? int
|
||||
#? tuple
|
||||
isinst(2)
|
||||
#? list
|
||||
isinst(1.0)
|
||||
#? list
|
||||
#? tuple
|
||||
isinst(False)
|
||||
#? int()
|
||||
isinst('')
|
||||
|
||||
Reference in New Issue
Block a user