Fix a goto_assignments issue with a better internal API

Fixes #996.
This commit is contained in:
Dave Halter
2018-01-29 08:58:59 +01:00
parent 82dc83e150
commit c9fa335145
3 changed files with 13 additions and 3 deletions

View File

@@ -212,9 +212,7 @@ class Script(object):
if follow_imports:
def check(name):
if isinstance(name, ModuleName):
return False
return name.api_type == 'module'
return name.is_import()
else:
def check(name):
return isinstance(name, imports.SubModuleName)

View File

@@ -42,6 +42,9 @@ class AbstractNameDefinition(object):
def execute_evaluated(self, *args, **kwargs):
return self.infer().execute_evaluated(*args, **kwargs)
def is_import(self):
return False
@property
def api_type(self):
return self.parent_context.api_type
@@ -55,6 +58,10 @@ class AbstractTreeName(AbstractNameDefinition):
def goto(self):
return self.parent_context.evaluator.goto(self.parent_context, self.tree_name)
def is_import(self):
imp = search_ancestor(self.tree_name, 'import_from', 'import_name')
return imp is not None
@property
def string_name(self):
return self.tree_name.value

View File

@@ -199,6 +199,11 @@ def test_goto_following_on_imports(Script):
assert (g[0].line, g[0].column) != (0, 0)
def test_goto_assignments(Script):
sys, = Script("import sys", 1, 10).goto_assignments(follow_imports=True)
assert sys.type == 'module'
def test_os_after_from(Script):
def check(source, result, column=None):
completions = Script(source, column=column).completions()