mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-09 07:14:48 +08:00
Fix a few more goto_definition error_node imports
This commit is contained in:
@@ -290,7 +290,7 @@ class Evaluator(object):
|
|||||||
return check_tuple_assignments(self, c_node, for_types)
|
return check_tuple_assignments(self, c_node, for_types)
|
||||||
if type_ in ('import_from', 'import_name'):
|
if type_ in ('import_from', 'import_name'):
|
||||||
return imports.infer_import(context, name)
|
return imports.infer_import(context, name)
|
||||||
|
else:
|
||||||
result = self.follow_error_node_imports_if_possible(context, name)
|
result = self.follow_error_node_imports_if_possible(context, name)
|
||||||
if result is not None:
|
if result is not None:
|
||||||
return result
|
return result
|
||||||
@@ -299,6 +299,8 @@ class Evaluator(object):
|
|||||||
|
|
||||||
def follow_error_node_imports_if_possible(self, context, name):
|
def follow_error_node_imports_if_possible(self, context, name):
|
||||||
error_node = tree.search_ancestor(name, 'error_node')
|
error_node = tree.search_ancestor(name, 'error_node')
|
||||||
|
#if 'expr_stmt', 'del_stmt', 'flow_stmt',
|
||||||
|
#'import_stmt', 'global_stmt', 'nonlocal_stmt' 'assert_stmt'
|
||||||
if error_node is not None:
|
if error_node is not None:
|
||||||
# Make it possible to infer stuff like `import foo.` or
|
# Make it possible to infer stuff like `import foo.` or
|
||||||
# `from foo.bar`.
|
# `from foo.bar`.
|
||||||
@@ -307,7 +309,8 @@ class Evaluator(object):
|
|||||||
is_import_from = first_name == 'from'
|
is_import_from = first_name == 'from'
|
||||||
level, names = helpers.parse_dotted_names(
|
level, names = helpers.parse_dotted_names(
|
||||||
error_node.children,
|
error_node.children,
|
||||||
is_import_from=is_import_from
|
is_import_from=is_import_from,
|
||||||
|
until_node=name,
|
||||||
)
|
)
|
||||||
return imports.Importer(self, names, context.get_root_context(), level).follow()
|
return imports.Importer(self, names, context.get_root_context(), level).follow()
|
||||||
return None
|
return None
|
||||||
@@ -329,7 +332,7 @@ class Evaluator(object):
|
|||||||
elif type_ in ('import_from', 'import_name'):
|
elif type_ in ('import_from', 'import_name'):
|
||||||
module_names = imports.infer_import(context, name, is_goto=True)
|
module_names = imports.infer_import(context, name, is_goto=True)
|
||||||
return module_names
|
return module_names
|
||||||
|
else:
|
||||||
contexts = self.follow_error_node_imports_if_possible(context, name)
|
contexts = self.follow_error_node_imports_if_possible(context, name)
|
||||||
if contexts is not None:
|
if contexts is not None:
|
||||||
return [context.name for context in contexts]
|
return [context.name for context in contexts]
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ def execute_evaluated(context, *value_list):
|
|||||||
return context.evaluator.execute(context, arguments)
|
return context.evaluator.execute(context, arguments)
|
||||||
|
|
||||||
|
|
||||||
def parse_dotted_names(nodes, is_import_from):
|
def parse_dotted_names(nodes, is_import_from, until_node=None):
|
||||||
level = 0
|
level = 0
|
||||||
names = []
|
names = []
|
||||||
for node in nodes[1:]:
|
for node in nodes[1:]:
|
||||||
@@ -249,9 +249,17 @@ def parse_dotted_names(nodes, is_import_from):
|
|||||||
if not names:
|
if not names:
|
||||||
level += len(node.value)
|
level += len(node.value)
|
||||||
elif node.type == 'dotted_name':
|
elif node.type == 'dotted_name':
|
||||||
names += node.children[::2]
|
for n in node.children[::2]:
|
||||||
|
names.append(n)
|
||||||
|
if n is until_node:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
break
|
||||||
elif node.type == 'name':
|
elif node.type == 'name':
|
||||||
names.append(node)
|
names.append(node)
|
||||||
|
if node is until_node:
|
||||||
|
break
|
||||||
elif node == ',':
|
elif node == ',':
|
||||||
if not is_import_from:
|
if not is_import_from:
|
||||||
names = []
|
names = []
|
||||||
|
|||||||
@@ -119,8 +119,14 @@ def broken_import():
|
|||||||
#? import_tree.mod1
|
#? import_tree.mod1
|
||||||
from import_tree.mod1
|
from import_tree.mod1
|
||||||
|
|
||||||
#? 20 import_tree.mod1
|
#? 25 import_tree.mod1
|
||||||
import import_tree.mod1.
|
import import_tree.mod1.
|
||||||
|
#? 25 import_tree.mod1
|
||||||
|
impo5t import_tree.mod1.foo
|
||||||
|
#? 25 import_tree.mod1
|
||||||
|
import import_tree.mod1.foo.
|
||||||
|
#? 31 import_tree.mod1
|
||||||
|
import json, import_tree.mod1.foo.
|
||||||
|
|
||||||
#! ['module json']
|
#! ['module json']
|
||||||
from json
|
from json
|
||||||
|
|||||||
Reference in New Issue
Block a user