diff --git a/jedi/api.py b/jedi/api.py index 05eb60d9..5eedd23c 100644 --- a/jedi/api.py +++ b/jedi/api.py @@ -391,7 +391,9 @@ class Script(object): defs, search_name = evaluate.goto(stmt) definitions = follow_inexistent_imports(defs) if isinstance(user_stmt, pr.Statement): - if user_stmt.get_commands()[0].start_pos > self.pos: + call = user_stmt.get_commands()[0] + if not isinstance(call, (str, unicode)) and \ + call.start_pos > self.pos: # The cursor must be after the start, otherwise the # statement is just an assignee. definitions = [user_stmt] diff --git a/jedi/evaluate.py b/jedi/evaluate.py index 1355672b..5aea7a48 100644 --- a/jedi/evaluate.py +++ b/jedi/evaluate.py @@ -794,7 +794,10 @@ def goto(stmt, call_path=None): commands = stmt.get_commands() assert len(commands) == 1 call = commands[0] - call_path = list(call.generate_call_path()) + if isinstance(call, (str, unicode)): + call_path = [call] + else: + call_path = list(call.generate_call_path()) scope = stmt.get_parent_until(pr.IsScope) pos = stmt.start_pos diff --git a/test/test_regression.py b/test/test_regression.py index 48e6b2ad..e44afb8d 100755 --- a/test/test_regression.py +++ b/test/test_regression.py @@ -329,6 +329,14 @@ class TestRegression(TestBase): defs = self.goto_definitions("assert") assert len(defs) == 1 + def test_goto_assignments_keyword(self): + """ + Bug: goto assignments on ``in`` used to raise AttributeError:: + + 'unicode' object has no attribute 'generate_call_path' + """ + self.goto_assignments('in') + def test_goto_following_on_imports(self): s = "import multiprocessing.dummy; multiprocessing.dummy" g = self.goto_assignments(s)