From 05fe29a156732d95d5987ece967db0a614b32da0 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Fri, 23 Aug 2019 00:02:39 +0200 Subject: [PATCH] Get rid of the node_is_value parameter --- jedi/api/completion.py | 9 ++++--- jedi/inference/compiled/mixed.py | 11 +++----- jedi/inference/context.py | 45 +++++++++++++++----------------- 3 files changed, 31 insertions(+), 34 deletions(-) diff --git a/jedi/api/completion.py b/jedi/api/completion.py index c8fc0839..be5a4650 100644 --- a/jedi/api/completion.py +++ b/jedi/api/completion.py @@ -15,7 +15,7 @@ from jedi.inference import imports from jedi.inference.helpers import infer_call_of_leaf, parse_dotted_names from jedi.inference.filters import get_global_filters 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): @@ -70,7 +70,10 @@ def get_user_context(module_context, position): scanned_node = scan(module_context.tree_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 else: return module_context.create_context(user_stmt) @@ -284,7 +287,7 @@ class Completion: return # 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]: return diff --git a/jedi/inference/compiled/mixed.py b/jedi/inference/compiled/mixed.py index 30c3d63b..833ce43f 100644 --- a/jedi/inference/compiled/mixed.py +++ b/jedi/inference/compiled/mixed.py @@ -289,13 +289,10 @@ def _create(inference_state, access_handle, parent_context, *args): return ValueSet({compiled_object}) module_context = parent_context.get_root_context() - tree_values = ValueSet({ - module_context.create_context( - tree_node, - node_is_value=True, - )._value - # TODO private access! - }) + if tree_node is module_node: + tree_values = ValueSet({module_context.get_value()}) + else: + tree_values = ValueSet({module_context.create_value(tree_node)}) if tree_node.type == 'classdef': if not access_handle.is_class(): # Is an instance, not a class. diff --git a/jedi/inference/context.py b/jedi/inference/context.py index 8bdc5202..3459c40f 100644 --- a/jedi/inference/context.py +++ b/jedi/inference/context.py @@ -43,7 +43,7 @@ class AbstractContext(object): else: 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): if scope_node == base_node: return self @@ -60,31 +60,28 @@ class AbstractContext(object): base_node = self.tree_node - if node_is_value and parser_utils.is_scope(node): - scope_node = node - else: - def parent_scope(node): - while True: - node = node.parent + def parent_scope(node): + while True: + node = node.parent - if parser_utils.is_scope(node): - return node - elif node.type in ('argument', 'testlist_comp'): - if node.children[1].type in ('comp_for', 'sync_comp_for'): - return node.children[1] - elif node.type == 'dictorsetmaker': - for n in node.children[1:4]: - # In dictionaries it can be pretty much anything. - if n.type in ('comp_for', 'sync_comp_for'): - return n + if parser_utils.is_scope(node): + return node + elif node.type in ('argument', 'testlist_comp'): + if node.children[1].type in ('comp_for', 'sync_comp_for'): + return node.children[1] + elif node.type == 'dictorsetmaker': + for n in node.children[1:4]: + # In dictionaries it can be pretty much anything. + if n.type in ('comp_for', 'sync_comp_for'): + return n - scope_node = parent_scope(node) - if scope_node.type in ('funcdef', 'classdef'): - colon = scope_node.children[scope_node.children.index(':')] - if node.start_pos < colon.start_pos: - parent = node.parent - if not (parent.type == 'param' and parent.name == node): - scope_node = parent_scope(scope_node) + scope_node = parent_scope(node) + if scope_node.type in ('funcdef', 'classdef'): + colon = scope_node.children[scope_node.children.index(':')] + if node.start_pos < colon.start_pos: + parent = node.parent + if not (parent.type == 'param' and parent.name == node): + scope_node = parent_scope(scope_node) return from_scope_node(scope_node, is_nested=True) def goto(self, name_or_str, position):