forked from VimPlug/jedi
Starting to try to move some functions away from Evaluator.
This time eval_trailer.
This commit is contained in:
@@ -77,13 +77,13 @@ from jedi.evaluate import stdlib
|
|||||||
from jedi.evaluate import finder
|
from jedi.evaluate import finder
|
||||||
from jedi.evaluate import compiled
|
from jedi.evaluate import compiled
|
||||||
from jedi.evaluate import precedence
|
from jedi.evaluate import precedence
|
||||||
from jedi.evaluate import param
|
|
||||||
from jedi.evaluate import helpers
|
from jedi.evaluate import helpers
|
||||||
from jedi.evaluate import pep0484
|
from jedi.evaluate import pep0484
|
||||||
from jedi.evaluate.filters import TreeNameDefinition, ParamName
|
from jedi.evaluate.filters import TreeNameDefinition, ParamName
|
||||||
from jedi.evaluate.instance import AnonymousInstance, BoundMethod
|
from jedi.evaluate.instance import AnonymousInstance, BoundMethod
|
||||||
from jedi.evaluate.context import ContextualizedName, ContextualizedNode, \
|
from jedi.evaluate.context import ContextualizedName, ContextualizedNode, \
|
||||||
ContextSet, NO_CONTEXTS
|
ContextSet, NO_CONTEXTS
|
||||||
|
from jedi.evaluate.syntax_tree import eval_trailer
|
||||||
from jedi import parser_utils
|
from jedi import parser_utils
|
||||||
|
|
||||||
|
|
||||||
@@ -330,7 +330,7 @@ class Evaluator(object):
|
|||||||
right
|
right
|
||||||
)
|
)
|
||||||
break
|
break
|
||||||
context_set = self.eval_trailer(context, context_set, trailer)
|
context_set = eval_trailer(context, context_set, trailer)
|
||||||
return context_set
|
return context_set
|
||||||
return NO_CONTEXTS
|
return NO_CONTEXTS
|
||||||
elif typ in ('testlist_star_expr', 'testlist',):
|
elif typ in ('testlist_star_expr', 'testlist',):
|
||||||
@@ -428,25 +428,6 @@ class Evaluator(object):
|
|||||||
context = iterable.SequenceLiteralContext(self, context, atom)
|
context = iterable.SequenceLiteralContext(self, context, atom)
|
||||||
return ContextSet(context)
|
return ContextSet(context)
|
||||||
|
|
||||||
def eval_trailer(self, context, base_contexts, trailer):
|
|
||||||
trailer_op, node = trailer.children[:2]
|
|
||||||
if node == ')': # `arglist` is optional.
|
|
||||||
node = ()
|
|
||||||
|
|
||||||
if trailer_op == '[':
|
|
||||||
return iterable.py__getitem__(self, context, base_contexts, trailer)
|
|
||||||
else:
|
|
||||||
debug.dbg('eval_trailer: %s in %s', trailer, base_contexts)
|
|
||||||
if trailer_op == '.':
|
|
||||||
return base_contexts.py__getattribute__(
|
|
||||||
name_context=context,
|
|
||||||
name_or_str=node
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
assert trailer_op == '('
|
|
||||||
arguments = param.TreeArguments(self, context, node, trailer)
|
|
||||||
return base_contexts.execute(arguments)
|
|
||||||
|
|
||||||
@debug.increase_indent
|
@debug.increase_indent
|
||||||
def execute(self, obj, arguments):
|
def execute(self, obj, arguments):
|
||||||
if self.is_analysis:
|
if self.is_analysis:
|
||||||
@@ -527,7 +508,7 @@ class Evaluator(object):
|
|||||||
to_evaluate = trailer.parent.children[:i]
|
to_evaluate = trailer.parent.children[:i]
|
||||||
context_set = context.eval_node(to_evaluate[0])
|
context_set = context.eval_node(to_evaluate[0])
|
||||||
for trailer in to_evaluate[1:]:
|
for trailer in to_evaluate[1:]:
|
||||||
context_set = self.eval_trailer(context, context_set, trailer)
|
context_set = eval_trailer(context, context_set, trailer)
|
||||||
param_names = []
|
param_names = []
|
||||||
for context in context_set:
|
for context in context_set:
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -41,9 +41,6 @@ class MixedObject(object):
|
|||||||
# We have to overwrite everything that has to do with trailers, name
|
# We have to overwrite everything that has to do with trailers, name
|
||||||
# lookups and filters to make it possible to route name lookups towards
|
# lookups and filters to make it possible to route name lookups towards
|
||||||
# compiled objects and the rest towards tree node contexts.
|
# compiled objects and the rest towards tree node contexts.
|
||||||
def eval_trailer(*args, **kwags):
|
|
||||||
return Context.eval_trailer(*args, **kwags)
|
|
||||||
|
|
||||||
def py__getattribute__(*args, **kwargs):
|
def py__getattribute__(*args, **kwargs):
|
||||||
return Context.py__getattribute__(*args, **kwargs)
|
return Context.py__getattribute__(*args, **kwargs)
|
||||||
|
|
||||||
|
|||||||
@@ -49,9 +49,6 @@ class Context(object):
|
|||||||
def eval_stmt(self, stmt, seek_name=None):
|
def eval_stmt(self, stmt, seek_name=None):
|
||||||
return self.evaluator.eval_statement(self, stmt, seek_name)
|
return self.evaluator.eval_statement(self, stmt, seek_name)
|
||||||
|
|
||||||
def eval_trailer(self, types, trailer):
|
|
||||||
return self.evaluator.eval_trailer(self, types, trailer)
|
|
||||||
|
|
||||||
@Python3Method
|
@Python3Method
|
||||||
def py__getattribute__(self, name_or_str, name_context=None, position=None,
|
def py__getattribute__(self, name_or_str, name_context=None, position=None,
|
||||||
search_global=False, is_goto=False,
|
search_global=False, is_goto=False,
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ from jedi.evaluate import helpers
|
|||||||
from jedi.evaluate.filters import get_global_filters, TreeNameDefinition
|
from jedi.evaluate.filters import get_global_filters, TreeNameDefinition
|
||||||
from jedi.evaluate.context import ContextualizedName, ContextualizedNode, ContextSet
|
from jedi.evaluate.context import ContextualizedName, ContextualizedNode, ContextSet
|
||||||
from jedi.parser_utils import is_scope, get_parent_scope
|
from jedi.parser_utils import is_scope, get_parent_scope
|
||||||
|
from jedi.evaluate.syntax_tree import eval_trailer
|
||||||
|
|
||||||
|
|
||||||
class NameFinder(object):
|
class NameFinder(object):
|
||||||
@@ -263,7 +264,7 @@ def _apply_decorators(evaluator, context, node):
|
|||||||
# Create a trailer and evaluate it.
|
# Create a trailer and evaluate it.
|
||||||
trailer = tree.PythonNode('trailer', trailer_nodes)
|
trailer = tree.PythonNode('trailer', trailer_nodes)
|
||||||
trailer.parent = dec
|
trailer.parent = dec
|
||||||
dec_values = evaluator.eval_trailer(context, dec_values, trailer)
|
dec_values = eval_trailer(context, dec_values, trailer)
|
||||||
|
|
||||||
if not len(dec_values):
|
if not len(dec_values):
|
||||||
debug.warning('decorator not found: %s on %s', dec, node)
|
debug.warning('decorator not found: %s on %s', dec, node)
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ from itertools import chain
|
|||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
|
||||||
from parso.python import tree
|
from parso.python import tree
|
||||||
|
|
||||||
from jedi.parser_utils import get_parent_scope
|
from jedi.parser_utils import get_parent_scope
|
||||||
|
from jedi.evaluate.syntax_tree import eval_trailer
|
||||||
|
|
||||||
|
|
||||||
def is_stdlib_path(path):
|
def is_stdlib_path(path):
|
||||||
@@ -88,7 +90,7 @@ def evaluate_call_of_leaf(context, leaf, cut_own_trailer=False):
|
|||||||
|
|
||||||
values = context.eval_node(base)
|
values = context.eval_node(base)
|
||||||
for trailer in trailers:
|
for trailer in trailers:
|
||||||
values = context.eval_trailer(values, trailer)
|
values = eval_trailer(context, values, trailer)
|
||||||
return values
|
return values
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
"""
|
||||||
|
Functions evaluating the syntax tree.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from jedi import debug
|
||||||
|
|
||||||
|
|
||||||
|
def eval_trailer(context, base_contexts, trailer):
|
||||||
|
trailer_op, node = trailer.children[:2]
|
||||||
|
if node == ')': # `arglist` is optional.
|
||||||
|
node = ()
|
||||||
|
|
||||||
|
if trailer_op == '[':
|
||||||
|
from jedi.evaluate import iterable
|
||||||
|
return iterable.py__getitem__(context.evaluator, context, base_contexts, trailer)
|
||||||
|
else:
|
||||||
|
debug.dbg('eval_trailer: %s in %s', trailer, base_contexts)
|
||||||
|
if trailer_op == '.':
|
||||||
|
return base_contexts.py__getattribute__(
|
||||||
|
name_context=context,
|
||||||
|
name_or_str=node
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
assert trailer_op == '('
|
||||||
|
from jedi.evaluate import param
|
||||||
|
arguments = param.TreeArguments(context.evaluator, context, node, trailer)
|
||||||
|
return base_contexts.execute(arguments)
|
||||||
Reference in New Issue
Block a user