diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index 7579b5db..26eacbe9 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -198,8 +198,13 @@ class Evaluator(object): # The implicit tuple in statements. return [iterable.Array(self, element, pr.Array.TUPLE)] else: - left, operator, right = element.children - return precedence.calculate(self, self.eval_element(left), operator, + if element.children[0] == 'not': + left = [] + operator, right = element.children + else: + left, operator, right = element.children + left = self.eval_element(left) + return precedence.calculate(self, left, operator, self.eval_element(right)) def _eval_atom(self, atom): diff --git a/jedi/evaluate/stdlib.py b/jedi/evaluate/stdlib.py index d94b7d68..4b391768 100644 --- a/jedi/evaluate/stdlib.py +++ b/jedi/evaluate/stdlib.py @@ -164,11 +164,10 @@ def builtins_reversed(evaluator, obj, params): return [er.Instance(evaluator, obj, objects)] -def builtins_isinstance(evaluator, obj, params): - obj = _follow_param(evaluator, params, 0) - raw_classes = _follow_param(evaluator, params, 1) +@argument_clinic('obj, type, /') +def builtins_isinstance(evaluator, objects, types): bool_results = set([]) - for o in obj: + for o in objects: try: mro_func = o.py__class__(evaluator).py__mro__ except AttributeError: @@ -179,7 +178,7 @@ def builtins_isinstance(evaluator, obj, params): mro = mro_func(evaluator) - for cls_or_tup in raw_classes: + for cls_or_tup in types: if cls_or_tup.is_class(): bool_results.add(cls_or_tup in mro) else: