mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-07 06:24:27 +08:00
Made TreeArguments methods a bit more understandable
This commit is contained in:
@@ -301,13 +301,7 @@ class Script(object):
|
|||||||
names = list(self._evaluator.goto(context, tree_name))
|
names = list(self._evaluator.goto(context, tree_name))
|
||||||
|
|
||||||
if follow_imports:
|
if follow_imports:
|
||||||
def check(name):
|
names = filter_follow_imports(names, lambda name: name.is_import())
|
||||||
return name.is_import()
|
|
||||||
else:
|
|
||||||
def check(name):
|
|
||||||
return False
|
|
||||||
|
|
||||||
names = filter_follow_imports(names, check)
|
|
||||||
names = try_stub_to_actual_names(names, prefer_stub_to_compiled=True)
|
names = try_stub_to_actual_names(names, prefer_stub_to_compiled=True)
|
||||||
|
|
||||||
defs = [classes.Definition(self._evaluator, d) for d in set(names)]
|
defs = [classes.Definition(self._evaluator, d) for d in set(names)]
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from jedi.evaluate.utils import PushBackIterator
|
|||||||
from jedi.evaluate import analysis
|
from jedi.evaluate import analysis
|
||||||
from jedi.evaluate.lazy_context import LazyKnownContext, LazyKnownContexts, \
|
from jedi.evaluate.lazy_context import LazyKnownContext, LazyKnownContexts, \
|
||||||
LazyTreeContext, get_merged_lazy_context
|
LazyTreeContext, get_merged_lazy_context
|
||||||
from jedi.evaluate.names import ParamName
|
from jedi.evaluate.names import ParamName, TreeNameDefinition
|
||||||
from jedi.evaluate.base_context import NO_CONTEXTS, ContextSet, ContextualizedNode
|
from jedi.evaluate.base_context import NO_CONTEXTS, ContextSet, ContextualizedNode
|
||||||
from jedi.evaluate.context import iterable
|
from jedi.evaluate.context import iterable
|
||||||
from jedi.evaluate.param import get_executed_params_and_issues, ExecutedParam
|
from jedi.evaluate.param import get_executed_params_and_issues, ExecutedParam
|
||||||
@@ -244,7 +244,7 @@ class TreeArguments(AbstractArguments):
|
|||||||
for named_arg in named_args:
|
for named_arg in named_args:
|
||||||
yield named_arg
|
yield named_arg
|
||||||
|
|
||||||
def as_tree_tuple_objects(self):
|
def _as_tree_tuple_objects(self):
|
||||||
for star_count, argument in unpack_arglist(self.argument_node):
|
for star_count, argument in unpack_arglist(self.argument_node):
|
||||||
if argument.type == 'argument':
|
if argument.type == 'argument':
|
||||||
argument, default = argument.children[::2]
|
argument, default = argument.children[::2]
|
||||||
@@ -252,6 +252,14 @@ class TreeArguments(AbstractArguments):
|
|||||||
default = None
|
default = None
|
||||||
yield argument, default, star_count
|
yield argument, default, star_count
|
||||||
|
|
||||||
|
def iter_calling_names_with_star(self):
|
||||||
|
for name, default, star_count in self._as_tree_tuple_objects():
|
||||||
|
# TODO this function is a bit strange. probably refactor?
|
||||||
|
if not star_count or not isinstance(name, tree.Name):
|
||||||
|
continue
|
||||||
|
|
||||||
|
yield TreeNameDefinition(self.context, name)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '<%s: %s>' % (self.__class__.__name__, self.argument_node)
|
return '<%s: %s>' % (self.__class__.__name__, self.argument_node)
|
||||||
|
|
||||||
@@ -265,11 +273,8 @@ class TreeArguments(AbstractArguments):
|
|||||||
break
|
break
|
||||||
|
|
||||||
old_arguments_list.append(arguments)
|
old_arguments_list.append(arguments)
|
||||||
for name, default, star_count in reversed(list(arguments.as_tree_tuple_objects())):
|
for calling_name in reversed(list(arguments.iter_calling_names_with_star())):
|
||||||
if not star_count or not isinstance(name, tree.Name):
|
names = calling_name.goto()
|
||||||
continue
|
|
||||||
|
|
||||||
names = self._evaluator.goto(arguments.context, name)
|
|
||||||
if len(names) != 1:
|
if len(names) != 1:
|
||||||
break
|
break
|
||||||
if not isinstance(names[0], ParamName):
|
if not isinstance(names[0], ParamName):
|
||||||
|
|||||||
Reference in New Issue
Block a user