mirror of
https://github.com/davidhalter/jedi.git
synced 2026-09-22 18:53:14 +08:00
Avoid goto crashes on unfinished keyword calls (#2106)
This commit is contained in:
@@ -66,6 +66,7 @@ Code Contributors
|
|||||||
- Martin Vielsmaier (@moser) <martin@vielsmaier.net>
|
- Martin Vielsmaier (@moser) <martin@vielsmaier.net>
|
||||||
- TingJia Wu (@WutingjiaX) <wutingjia@bytedance.com>
|
- TingJia Wu (@WutingjiaX) <wutingjia@bytedance.com>
|
||||||
- Nguyễn Hồng Quân <ng.hong.quan@gmail.com>
|
- Nguyễn Hồng Quân <ng.hong.quan@gmail.com>
|
||||||
|
- haoran3160-afk (@haoran3160-afk)
|
||||||
|
|
||||||
And a few more "anonymous" contributors.
|
And a few more "anonymous" contributors.
|
||||||
|
|
||||||
|
|||||||
@@ -170,6 +170,8 @@ class AbstractTreeName(AbstractNameDefinition):
|
|||||||
trailer = par.parent
|
trailer = par.parent
|
||||||
if trailer.type == 'arglist':
|
if trailer.type == 'arglist':
|
||||||
trailer = trailer.parent
|
trailer = trailer.parent
|
||||||
|
if trailer.type == 'error_node':
|
||||||
|
return []
|
||||||
if trailer.type != 'classdef':
|
if trailer.type != 'classdef':
|
||||||
if trailer.type == 'decorator':
|
if trailer.type == 'decorator':
|
||||||
value_set = context.infer_node(trailer.children[1])
|
value_set = context.infer_node(trailer.children[1])
|
||||||
|
|||||||
@@ -231,6 +231,19 @@ def test_goto_follow_imports(Script):
|
|||||||
assert d.name == 'a'
|
assert d.name == 'a'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('prefix', ['', 'def foo(bar): pass\n', 'def f():\n '])
|
||||||
|
@pytest.mark.parametrize('call', ['foo(bar=1', 'foo(bar=1,', 'foo(foo(bar=1'])
|
||||||
|
def test_goto_incomplete_named_argument(Script, prefix, call):
|
||||||
|
code = prefix + call
|
||||||
|
column = code.splitlines()[-1].index('bar')
|
||||||
|
assert Script(code).goto(column=column) == []
|
||||||
|
|
||||||
|
|
||||||
|
def test_goto_named_argument_in_complete_inner_call(Script):
|
||||||
|
param, = Script('def foo(bar): pass\nfoo(foo(bar=1)').goto(2, 8)
|
||||||
|
assert (param.name, param.line, param.column) == ('bar', 1, 8)
|
||||||
|
|
||||||
|
|
||||||
def test_goto_module(Script):
|
def test_goto_module(Script):
|
||||||
def check(line, expected, follow_imports=False):
|
def check(line, expected, follow_imports=False):
|
||||||
script = Script(path=path)
|
script = Script(path=path)
|
||||||
|
|||||||
Reference in New Issue
Block a user