mirror of
https://github.com/davidhalter/jedi.git
synced 2026-05-25 01:38:36 +08:00
Move some anonymous instance function execution stuff
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
from abc import abstractproperty
|
from abc import abstractproperty
|
||||||
|
|
||||||
|
from parso.tree import search_ancestor
|
||||||
|
|
||||||
from jedi import debug
|
from jedi import debug
|
||||||
from jedi import settings
|
from jedi import settings
|
||||||
from jedi.evaluate import compiled
|
from jedi.evaluate import compiled
|
||||||
@@ -11,13 +13,31 @@ from jedi.evaluate.cache import evaluator_method_cache
|
|||||||
from jedi.evaluate.arguments import AbstractArguments, AnonymousArguments
|
from jedi.evaluate.arguments import AbstractArguments, AnonymousArguments
|
||||||
from jedi.evaluate.context.function import FunctionExecutionContext, \
|
from jedi.evaluate.context.function import FunctionExecutionContext, \
|
||||||
FunctionContext, AbstractFunction
|
FunctionContext, AbstractFunction
|
||||||
|
from jedi.evaluate.filters import FunctionExecutionFilter, ParamName
|
||||||
from jedi.evaluate.context.klass import ClassContext, apply_py__get__, ClassFilter
|
from jedi.evaluate.context.klass import ClassContext, apply_py__get__, ClassFilter
|
||||||
from jedi.evaluate.context import iterable
|
from jedi.evaluate.context import iterable
|
||||||
from jedi.parser_utils import get_parent_scope
|
from jedi.parser_utils import get_parent_scope
|
||||||
|
|
||||||
|
|
||||||
|
class _AnonymousInstanceParamName(ParamName):
|
||||||
|
def infer(self):
|
||||||
|
param_node = search_ancestor(self.tree_name, 'param')
|
||||||
|
# TODO I think this should not belong here. It's not even really true,
|
||||||
|
# because classmethod and other descriptors can change it.
|
||||||
|
if param_node.position_index == 0:
|
||||||
|
# This is a speed optimization, to return the self param (because
|
||||||
|
# it's known). This only affects anonymous instances.
|
||||||
|
return ContextSet(self.parent_context.instance)
|
||||||
|
else:
|
||||||
|
return self.get_param().infer()
|
||||||
|
|
||||||
|
|
||||||
|
class _AnonymousInstanceFunctionExecutionFilter(FunctionExecutionFilter):
|
||||||
|
param_name = _AnonymousInstanceParamName
|
||||||
|
|
||||||
|
|
||||||
class AnonymousInstanceFunctionExecution(FunctionExecutionContext):
|
class AnonymousInstanceFunctionExecution(FunctionExecutionContext):
|
||||||
function_execution_filter = filters.AnonymousInstanceFunctionExecutionFilter
|
function_execution_filter = _AnonymousInstanceFunctionExecutionFilter
|
||||||
|
|
||||||
def __init__(self, instance, *args, **kwargs):
|
def __init__(self, instance, *args, **kwargs):
|
||||||
self.instance = instance
|
self.instance = instance
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ from jedi.evaluate.cache import evaluator_method_cache, CachedMetaClass
|
|||||||
from jedi.evaluate import compiled
|
from jedi.evaluate import compiled
|
||||||
from jedi.evaluate.lazy_context import LazyKnownContext
|
from jedi.evaluate.lazy_context import LazyKnownContext
|
||||||
from jedi.evaluate.filters import ParserTreeFilter, TreeNameDefinition, \
|
from jedi.evaluate.filters import ParserTreeFilter, TreeNameDefinition, \
|
||||||
ContextName, AnonymousInstanceParamName
|
ContextName
|
||||||
from jedi.evaluate.base_context import ContextSet, iterator_to_context_set, \
|
from jedi.evaluate.base_context import ContextSet, iterator_to_context_set, \
|
||||||
TreeContext
|
TreeContext
|
||||||
|
|
||||||
|
|||||||
@@ -141,19 +141,6 @@ class ParamName(AbstractTreeName):
|
|||||||
return params[param_node.position_index]
|
return params[param_node.position_index]
|
||||||
|
|
||||||
|
|
||||||
class AnonymousInstanceParamName(ParamName):
|
|
||||||
def infer(self):
|
|
||||||
param_node = search_ancestor(self.tree_name, 'param')
|
|
||||||
# TODO I think this should not belong here. It's not even really true,
|
|
||||||
# because classmethod and other descriptors can change it.
|
|
||||||
if param_node.position_index == 0:
|
|
||||||
# This is a speed optimization, to return the self param (because
|
|
||||||
# it's known). This only affects anonymous instances.
|
|
||||||
return ContextSet(self.parent_context.instance)
|
|
||||||
else:
|
|
||||||
return self.get_param().infer()
|
|
||||||
|
|
||||||
|
|
||||||
class AbstractFilter(object):
|
class AbstractFilter(object):
|
||||||
_until_position = None
|
_until_position = None
|
||||||
|
|
||||||
@@ -266,10 +253,6 @@ class FunctionExecutionFilter(ParserTreeFilter):
|
|||||||
yield TreeNameDefinition(self.context, name)
|
yield TreeNameDefinition(self.context, name)
|
||||||
|
|
||||||
|
|
||||||
class AnonymousInstanceFunctionExecutionFilter(FunctionExecutionFilter):
|
|
||||||
param_name = AnonymousInstanceParamName
|
|
||||||
|
|
||||||
|
|
||||||
class GlobalNameFilter(AbstractUsedNamesFilter):
|
class GlobalNameFilter(AbstractUsedNamesFilter):
|
||||||
def __init__(self, context, parser_scope):
|
def __init__(self, context, parser_scope):
|
||||||
super(GlobalNameFilter, self).__init__(context, parser_scope)
|
super(GlobalNameFilter, self).__init__(context, parser_scope)
|
||||||
|
|||||||
Reference in New Issue
Block a user