mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-07 22:44:27 +08:00
Fix a follow_imports (goto) issue.
This commit is contained in:
@@ -223,9 +223,9 @@ class Script(object):
|
|||||||
|
|
||||||
:rtype: list of :class:`classes.Definition`
|
:rtype: list of :class:`classes.Definition`
|
||||||
"""
|
"""
|
||||||
def filter_follow_imports(names, follow_classes):
|
def filter_follow_imports(names, check):
|
||||||
for name in names:
|
for name in names:
|
||||||
if isinstance(name, follow_classes):
|
if check(name):
|
||||||
for context in name.infer():
|
for context in name.infer():
|
||||||
yield context.name
|
yield context.name
|
||||||
else:
|
else:
|
||||||
@@ -233,13 +233,12 @@ class Script(object):
|
|||||||
|
|
||||||
names = self._goto()
|
names = self._goto()
|
||||||
if follow_imports:
|
if follow_imports:
|
||||||
# TODO really, sure? TreeNameDefinition? Should probably not follow
|
names = filter_follow_imports(names, lambda name: name.api_type == 'module')
|
||||||
# that.
|
|
||||||
follow_classes = (imports.ImportName, TreeNameDefinition)
|
|
||||||
else:
|
else:
|
||||||
follow_classes = (imports.SubModuleName,)
|
names = filter_follow_imports(
|
||||||
|
names,
|
||||||
names = filter_follow_imports(names, follow_classes)
|
lambda name: isinstance(name, imports.SubModuleName)
|
||||||
|
)
|
||||||
|
|
||||||
defs = [classes.Definition(self._evaluator, d) for d in set(names)]
|
defs = [classes.Definition(self._evaluator, d) for d in set(names)]
|
||||||
return helpers.sorted_definitions(defs)
|
return helpers.sorted_definitions(defs)
|
||||||
|
|||||||
@@ -207,6 +207,9 @@ def test_goto_assignments_follow_imports():
|
|||||||
definition, = script.goto_assignments()
|
definition, = script.goto_assignments()
|
||||||
assert (definition.line, definition.column) == start_pos
|
assert (definition.line, definition.column) == start_pos
|
||||||
|
|
||||||
|
d, = api.Script('a = 1\na').goto_assignments(follow_imports=True)
|
||||||
|
assert d.name == 'a'
|
||||||
|
|
||||||
|
|
||||||
def test_goto_module():
|
def test_goto_module():
|
||||||
def check(line, expected):
|
def check(line, expected):
|
||||||
|
|||||||
Reference in New Issue
Block a user