get_definition on import statements talked about in issue #7

This commit is contained in:
David Halter
2012-09-10 14:48:59 +02:00
parent 440eae7c15
commit 0a8338f73d
3 changed files with 18 additions and 4 deletions

View File

@@ -1443,11 +1443,15 @@ def goto(scopes, search_name=None, statement_path_offset=1):
definitions = []
for s in scopes:
if isinstance(s, imports.ImportPath):
s = s.follow()[0]
try:
s = statement_path[0]
except IndexError:
pass
s = s.follow()[0]
except imports.ModuleNotFound:
continue
else:
try:
s = statement_path[0]
except IndexError:
pass
definitions.append(s)
else:
def remove_unreal_imports(names):

View File

@@ -233,6 +233,12 @@ def get_definition(source, line, column, source_path):
else:
scopes = set(_prepare_goto(source, 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]))
# add keywords
scopes |= keywords.get_keywords(string=goto_path, pos=pos)

View File

@@ -83,6 +83,10 @@ class TestRegression(unittest.TestCase):
s = self.complete("", (1,0))
assert len(s) > 0
def test_get_definition_on_import(self):
assert self.get_def("import os_blabla", (1, 8)) == []
assert len(self.get_def("import os", (1, 8))) == 1
def test_new(self):
""" This is just to try out things, removing or deleting it is ok. """
s = ("def abc(): pass\n"