diff --git a/functions.py b/functions.py index 73a847f2..9be27d85 100644 --- a/functions.py +++ b/functions.py @@ -240,6 +240,13 @@ def get_definition(source, line, column, source_path): :return: list of Definition objects, which are basically scopes. :rtype: list """ + def resolve_import_paths(scopes): + for s in scopes.copy(): + if isinstance(s, imports.ImportPath): + scopes.remove(s) + scopes.update(resolve_import_paths(set(s.follow()))) + return scopes + pos = (line, column) f = modules.ModuleWithCursor(source_path, source=source, position=pos) goto_path = f.get_path_under_cursor() @@ -253,11 +260,7 @@ def get_definition(source, line, column, source_path): else: scopes = set(_prepare_goto(pos, source_path, f, goto_path)) - for s in scopes.copy(): - if isinstance(s, imports.ImportPath): - scopes.remove(s) - evaluate.statement_path = [] - scopes.update(evaluate.goto([s])) + scopes = resolve_import_paths(scopes) # add keywords scopes |= keywords.get_keywords(string=goto_path, pos=pos) diff --git a/imports.py b/imports.py index bbf32cb3..9f0968ec 100644 --- a/imports.py +++ b/imports.py @@ -89,9 +89,8 @@ class ImportPath(object): for s, scope_names in evaluate.get_names_for_scope(scope, include_builtin=False): for n in scope_names: - if not isinstance(n.parent(), parsing.Import) \ - and (self.import_stmt.from_ns is None \ - or self.is_partial_import): + if self.import_stmt.from_ns is None \ + or self.is_partial_import: # from_ns must be defined to access module # values plus a partial import means that there # is something after the import, which