diff --git a/jedi/parser/user_context.py b/jedi/parser/user_context.py index c11f475d..3597c577 100644 --- a/jedi/parser/user_context.py +++ b/jedi/parser/user_context.py @@ -185,6 +185,10 @@ class UserContext(object): if tok_str in tokenize.ALWAYS_BREAK_TOKENS: break elif next_must_be_name: + if tok_type == tokenize.NUMBER: + # If there's a number at the end of the string, it will be + # tokenized as a number. So add it to the name. + tok_type, t, _, _ = next(generator) if tok_type == tokenize.NAME: end_pos = start_pos[0], start_pos[1] + len(tok_str) call, start_pos = self._calc_path_until_cursor(start_pos=end_pos) diff --git a/test/test_api/test_call_signatures.py b/test/test_api/test_call_signatures.py index 02467da7..5f56954f 100644 --- a/test/test_api/test_call_signatures.py +++ b/test/test_api/test_call_signatures.py @@ -195,6 +195,20 @@ class TestCallSignatures(TestCase): def test_flow_call(self): assert not Script('if (1').call_signatures() + def test_chained_calls(self): + source = dedent(''' + class B(): + def test2(self, arg): + pass + + class A(): + def test1(self): + return B() + + A().test1().test2(''') + + self._run(source, 'test2', 0) + class TestParams(TestCase): def params(self, source, line=None, column=None):