1
0
forked from VimPlug/jedi

Get rid of the node_is_value parameter

This commit is contained in:
Dave Halter
2019-08-23 00:02:39 +02:00
parent bd754718e1
commit 05fe29a156
3 changed files with 31 additions and 34 deletions

View File

@@ -15,7 +15,7 @@ from jedi.inference import imports
from jedi.inference.helpers import infer_call_of_leaf, parse_dotted_names from jedi.inference.helpers import infer_call_of_leaf, parse_dotted_names
from jedi.inference.filters import get_global_filters from jedi.inference.filters import get_global_filters
from jedi.inference.gradual.conversion import convert_values from jedi.inference.gradual.conversion import convert_values
from jedi.parser_utils import get_statement_of_position, cut_value_at_position from jedi.parser_utils import get_statement_of_position, cut_value_at_position, is_scope
def get_call_signature_param_names(call_signatures): def get_call_signature_param_names(call_signatures):
@@ -70,7 +70,10 @@ def get_user_context(module_context, position):
scanned_node = scan(module_context.tree_node) scanned_node = scan(module_context.tree_node)
if scanned_node: if scanned_node:
return module_context.create_context(scanned_node, node_is_value=True) if is_scope(scanned_node):
return module_context.create_value(scanned_node).as_context()
else:
return module_context.create_context(scanned_node)
return module_context return module_context
else: else:
return module_context.create_context(user_stmt) return module_context.create_context(user_stmt)
@@ -284,7 +287,7 @@ class Completion:
return return
# Complete the methods that are defined in the super classes. # Complete the methods that are defined in the super classes.
class_context = self._module_context.create_context(cls, node_is_value=True) class_context = self._module_context.create_value(cls).as_context()
if cls.start_pos[1] >= leaf.start_pos[1]: if cls.start_pos[1] >= leaf.start_pos[1]:
return return

View File

@@ -289,13 +289,10 @@ def _create(inference_state, access_handle, parent_context, *args):
return ValueSet({compiled_object}) return ValueSet({compiled_object})
module_context = parent_context.get_root_context() module_context = parent_context.get_root_context()
tree_values = ValueSet({ if tree_node is module_node:
module_context.create_context( tree_values = ValueSet({module_context.get_value()})
tree_node, else:
node_is_value=True, tree_values = ValueSet({module_context.create_value(tree_node)})
)._value
# TODO private access!
})
if tree_node.type == 'classdef': if tree_node.type == 'classdef':
if not access_handle.is_class(): if not access_handle.is_class():
# Is an instance, not a class. # Is an instance, not a class.

View File

@@ -43,7 +43,7 @@ class AbstractContext(object):
else: else:
raise NotImplementedError("Probably shouldn't happen: %s" % node) raise NotImplementedError("Probably shouldn't happen: %s" % node)
def create_context(self, node, node_is_value=False): def create_context(self, node):
def from_scope_node(scope_node, is_nested=True): def from_scope_node(scope_node, is_nested=True):
if scope_node == base_node: if scope_node == base_node:
return self return self
@@ -60,31 +60,28 @@ class AbstractContext(object):
base_node = self.tree_node base_node = self.tree_node
if node_is_value and parser_utils.is_scope(node): def parent_scope(node):
scope_node = node while True:
else: node = node.parent
def parent_scope(node):
while True:
node = node.parent
if parser_utils.is_scope(node): if parser_utils.is_scope(node):
return node return node
elif node.type in ('argument', 'testlist_comp'): elif node.type in ('argument', 'testlist_comp'):
if node.children[1].type in ('comp_for', 'sync_comp_for'): if node.children[1].type in ('comp_for', 'sync_comp_for'):
return node.children[1] return node.children[1]
elif node.type == 'dictorsetmaker': elif node.type == 'dictorsetmaker':
for n in node.children[1:4]: for n in node.children[1:4]:
# In dictionaries it can be pretty much anything. # In dictionaries it can be pretty much anything.
if n.type in ('comp_for', 'sync_comp_for'): if n.type in ('comp_for', 'sync_comp_for'):
return n return n
scope_node = parent_scope(node) scope_node = parent_scope(node)
if scope_node.type in ('funcdef', 'classdef'): if scope_node.type in ('funcdef', 'classdef'):
colon = scope_node.children[scope_node.children.index(':')] colon = scope_node.children[scope_node.children.index(':')]
if node.start_pos < colon.start_pos: if node.start_pos < colon.start_pos:
parent = node.parent parent = node.parent
if not (parent.type == 'param' and parent.name == node): if not (parent.type == 'param' and parent.name == node):
scope_node = parent_scope(scope_node) scope_node = parent_scope(scope_node)
return from_scope_node(scope_node, is_nested=True) return from_scope_node(scope_node, is_nested=True)
def goto(self, name_or_str, position): def goto(self, name_or_str, position):