diff --git a/evaluate.py b/evaluate.py index a522b4a6..5c3dcf7d 100644 --- a/evaluate.py +++ b/evaluate.py @@ -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): diff --git a/functions.py b/functions.py index bcb570f8..a3c860be 100644 --- a/functions.py +++ b/functions.py @@ -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) diff --git a/test/regression.py b/test/regression.py index 04b395e9..bf70b379 100755 --- a/test/regression.py +++ b/test/regression.py @@ -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"