diff --git a/jedi/api/__init__.py b/jedi/api/__init__.py index ae26b1b7..41f37164 100644 --- a/jedi/api/__init__.py +++ b/jedi/api/__init__.py @@ -322,41 +322,32 @@ class Script(object): goto_path = self._user_context.get_path_under_cursor() context = self._user_context.get_context() - scopes = set() - lower_priority_operators = ('()', '(', ',') + definitions = set() """Operators that could hide callee.""" if next(context) in ('class', 'def'): - scopes = set([self._parser.user_scope()]) - elif not goto_path: - op = self._user_context.get_operator_under_cursor() - if op and op not in lower_priority_operators: - scopes = set([keywords.get_operator(op, self._pos)]) + definitions = set([self._parser.user_scope()]) + else: + # Fetch definition of callee, if there's no path otherwise. + if not goto_path: + (call, _) = self._func_call_and_param_index() + if call is not None: + while call.next is not None: + call = call.next + # reset cursor position: + (row, col) = call.name.end_pos + pos = (row, max(col - 1, 0)) + self._user_context = UserContext(self.source, pos) + # then try to find the path again + goto_path = self._user_context.get_path_under_cursor() - # Fetch definition of callee, if there's no path otherwise. - if not goto_path: - (call, _) = self._func_call_and_param_index() - if call is not None: - while call.next is not None: - call = call.next - # reset cursor position: - (row, col) = call.name.end_pos - pos = (row, max(col - 1, 0)) - self._user_context = UserContext(self.source, pos) - # then try to find the path again - goto_path = self._user_context.get_path_under_cursor() - - if not scopes: + if not definitions: if goto_path: - scopes = set(self._prepare_goto(goto_path)) - elif op in lower_priority_operators: - scopes = set([keywords.get_operator(op, self._pos)]) + definitions = set(self._prepare_goto(goto_path)) + else: + definitions = set([]) - scopes = resolve_import_paths(scopes) - - # add keywords - scopes |= keywords.keywords(string=goto_path, pos=self._pos) - - d = set([classes.Definition(self._evaluator, s) for s in scopes + definitions = resolve_import_paths(definitions) + d = set([classes.Definition(self._evaluator, s) for s in definitions if s is not imports.ImportPath.GlobalNamespace]) return self._sorted_defs(d) diff --git a/test/test_api_classes.py b/test/test_api_classes.py index 43a99db7..f0026dca 100644 --- a/test/test_api_classes.py +++ b/test/test_api_classes.py @@ -10,8 +10,8 @@ import jedi def test_is_keyword(): - results = Script('import ', 1, 1, None).goto_definitions() - assert len(results) == 1 and results[0].is_keyword is True + #results = Script('import ', 1, 1, None).goto_definitions() + #assert len(results) == 1 and results[0].is_keyword is True results = Script('str', 1, 1, None).goto_definitions() assert len(results) == 1 and results[0].is_keyword is False diff --git a/test/test_integration_keyword.py b/test/test_integration_keyword.py index 5c0dbcc3..368f9348 100644 --- a/test/test_integration_keyword.py +++ b/test/test_integration_keyword.py @@ -4,6 +4,7 @@ Test of keywords and ``jedi.keywords`` import jedi from jedi import Script, common + def test_goto_assignments_keyword(): """ Bug: goto assignments on ``in`` used to raise AttributeError:: @@ -12,35 +13,16 @@ def test_goto_assignments_keyword(): """ Script('in').goto_assignments() -def test_keyword_doc(): - r = list(Script("or", 1, 1).goto_definitions()) - assert len(r) == 1 - assert len(r[0].doc) > 100 - - r = list(Script("asfdasfd", 1, 1).goto_definitions()) - assert len(r) == 0 - - k = Script("fro").completions()[0] - imp_start = '\nThe ``import' - assert k.raw_doc.startswith(imp_start) - assert k.doc.startswith(imp_start) def test_keyword(): """ github jedi-vim issue #44 """ defs = Script("print").goto_definitions() assert [d.doc for d in defs] - defs = Script("import").goto_definitions() - assert len(defs) == 1 and [1 for d in defs if d.doc] - # unrelated to #44 defs = Script("import").goto_assignments() assert len(defs) == 0 - completions = Script("import", 1,1).completions() + completions = Script("import", 1, 1).completions() assert len(completions) == 0 with common.ignored(jedi.NotFoundError): # TODO shouldn't throw that. defs = Script("assert").goto_definitions() assert len(defs) == 1 - -def test_lambda(): - defs = Script('lambda x: x', column=0).goto_definitions() - assert [d.type for d in defs] == ['keyword'] diff --git a/test/test_regression.py b/test/test_regression.py index 90087d85..26a43974 100644 --- a/test/test_regression.py +++ b/test/test_regression.py @@ -55,11 +55,6 @@ class TestRegression(TestCase): self.assertRaises(jedi.NotFoundError, get_def, cls) - def test_operator_doc(self): - r = list(Script("a == b", 1, 3).goto_definitions()) - assert len(r) == 1 - assert len(r[0].doc) > 100 - def test_goto_definition_at_zero(self): assert Script("a", 1, 1).goto_definitions() == [] s = Script("str", 1, 1).goto_definitions() @@ -142,7 +137,8 @@ class TestRegression(TestCase): break column = len(line) - len(after_cursor) defs = Script(source, i + 1, column).goto_definitions() - self.assertEqual([d.name for d in defs], names) + print(defs) + assert [d.name for d in defs] == names def test_backslash_continuation(self): """ @@ -163,7 +159,7 @@ class TestRegression(TestCase): x = 0 a = \ [1, 2, 3, 4, 5, 6, 7, 8, 9, (x)] # <-- here - """, '(x)] # <-- here', [None]) + """, '(x)] # <-- here', []) def test_generator(self): # Did have some problems with the usage of generator completions this