From b82e1e28e54ca77f57d5e24776197623d2b51b78 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sat, 22 Nov 2014 02:05:36 +0100 Subject: [PATCH] Get at least some usages stuff right. --- jedi/api/usages.py | 25 +++++++++++++++++-------- jedi/parser/representation.py | 3 ++- test/completion/goto.py | 2 +- test/completion/usages.py | 4 ++-- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/jedi/api/usages.py b/jedi/api/usages.py index ec0a6c0b..6d4dec6f 100644 --- a/jedi/api/usages.py +++ b/jedi/api/usages.py @@ -6,7 +6,7 @@ from jedi.evaluate import imports from jedi.evaluate import helpers -def usages(evaluator, definitions, mods): +def usages(evaluator, definition_names, mods): """ :param definitions: list of Name """ @@ -56,16 +56,25 @@ def usages(evaluator, definitions, mods): if any(r in compare_definitions for r in compare_follow_res): yield classes.Definition(evaluator, search) - search_name = unicode(list(definitions)[0]) - compare_definitions = compare_array(definitions) - mods |= set([d.get_parent_until() for d in definitions]) - names = [] + search_name = unicode(list(definition_names)[0]) + compare_definitions = compare_array(definition_names) + mods |= set([d.get_parent_until() for d in definition_names]) + definitions = [] for m in imports.get_modules_containing_name(mods, search_name): try: - stmts = m.used_names[search_name] + check_names = m.used_names[search_name] except KeyError: continue - for stmt in stmts: + for name in check_names: + + result = evaluator.goto(name) + if [c in compare_definitions for c in compare_array(result)]: + definitions.append(classes.Definition(evaluator, name)) + + continue # TODO DELETE + + + stmt = name.get_definition() if isinstance(stmt, pr.Import): count = 0 imps = [] @@ -83,7 +92,7 @@ def usages(evaluator, definitions, mods): else: for call in helpers.scan_statement_for_calls(stmt, search_name, assignment_details=True): names += check_call_for_usage(call) - return names + return definitions def usages_add_import_modules(evaluator, definitions): diff --git a/jedi/parser/representation.py b/jedi/parser/representation.py index 26d061ea..1134c0f0 100644 --- a/jedi/parser/representation.py +++ b/jedi/parser/representation.py @@ -1470,7 +1470,8 @@ class Param(Base): return self.get_parent_until(IsScope) def get_code(self): - return self.tfpdef.get_code() + df = '' if self.default is None else '=' + self.default.get_code() + return self.tfpdef.get_code() + df def __init__old(self): kwargs.pop('names_are_set_vars', None) diff --git a/test/completion/goto.py b/test/completion/goto.py index 58ab2e6b..663c15d7 100644 --- a/test/completion/goto.py +++ b/test/completion/goto.py @@ -93,7 +93,7 @@ ClassVar().x = '' # Recurring use of the same var name, github #315 def f(t=None): - #! 9 ['t = None'] + #! 9 ['t=None'] t = t or 1 # ----------------- diff --git a/test/completion/usages.py b/test/completion/usages.py index e7b762d3..a4c285b3 100644 --- a/test/completion/usages.py +++ b/test/completion/usages.py @@ -3,10 +3,10 @@ Renaming tests. This means search for usages. I always leave a little bit of space to add room for additions, because the results always contain position informations. """ -#< 4 (0,4), (3,0), (5,0) +#< 4 (0,4), (3,0), (5,0), (17,0) def abc(): pass -#< 0 (-3,4), (0,0), (2,0) +#< 0 (-3,4), (0,0), (2,0), (14,0) abc.d.a.bsaasd.abc.d abc