From 16f244a1b218fef066aedc9833cb6e433e66e224 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Thu, 25 Sep 2014 00:36:53 +0200 Subject: [PATCH] Fix isinstance issues. --- jedi/evaluate/finder.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/jedi/evaluate/finder.py b/jedi/evaluate/finder.py index 5e656b8f..832a7111 100644 --- a/jedi/evaluate/finder.py +++ b/jedi/evaluate/finder.py @@ -401,7 +401,26 @@ def check_flow_information(evaluator, flow, search_name_part, pos): return result -def _check_isinstance_type(evaluator, stmt, search_name_part): +def _check_isinstance_type(evaluator, stmt, search_name): + def names(call, use_previous=False): + def check(call): + while call is not None: + if not isinstance(call, pr.Call): # Could be an Array. + raise ValueError + yield unicode(call.name) + if use_previous: + call = call.previous + else: + call = call.next + + try: + if use_previous: + return list(check(call)) + else: + return list(reversed(list(check(call)))) + except ValueError: + return [] + try: expression_list = stmt.expression_list() # this might be removed if we analyze and, etc @@ -418,8 +437,7 @@ def _check_isinstance_type(evaluator, stmt, search_name_part): assert len(classes) == 1 assert isinstance(obj[0], pr.Call) - # names fit? - assert unicode(obj[0].name) == unicode(search_name_part.parent) + assert names(obj[0]) == names(search_name.parent, search_name) assert isinstance(classes[0], pr.StatementElement) # can be type or tuple except AssertionError: return []