mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-18 19:45:57 +08:00
Progress in creating anonymous instances.
This commit is contained in:
@@ -78,6 +78,7 @@ from jedi.evaluate import precedence
|
|||||||
from jedi.evaluate import param
|
from jedi.evaluate import param
|
||||||
from jedi.evaluate import helpers
|
from jedi.evaluate import helpers
|
||||||
from jedi.evaluate.context import Context
|
from jedi.evaluate.context import Context
|
||||||
|
from jedi.evaluate.instance import AnonymousInstance
|
||||||
|
|
||||||
|
|
||||||
class Evaluator(object):
|
class Evaluator(object):
|
||||||
@@ -528,13 +529,12 @@ class Evaluator(object):
|
|||||||
elif is_funcdef:
|
elif is_funcdef:
|
||||||
return er.AnonymousFunctionExecution(self, parent_context, scope_node)
|
return er.AnonymousFunctionExecution(self, parent_context, scope_node)
|
||||||
elif scope_node.type == 'classdef':
|
elif scope_node.type == 'classdef':
|
||||||
|
class_context = er.ClassContext(self, scope_node, parent_context)
|
||||||
if child_is_funcdef:
|
if child_is_funcdef:
|
||||||
# anonymous instance
|
# anonymous instance
|
||||||
raise NotImplementedError
|
return AnonymousInstance(self, parent_context, class_context)
|
||||||
else:
|
else:
|
||||||
return er.ClassContext(self, scope_node, parent_context)
|
return class_context
|
||||||
raise DeprecationWarning
|
|
||||||
return self.wrap(scope, parent_context=parent_context)
|
|
||||||
|
|
||||||
if node.is_scope():
|
if node.is_scope():
|
||||||
scope_node = node
|
scope_node = node
|
||||||
|
|||||||
@@ -1,12 +1,14 @@
|
|||||||
from abc import abstractproperty
|
from abc import abstractproperty
|
||||||
|
|
||||||
from jedi.common import unite, to_list
|
from jedi.common import unite
|
||||||
from jedi import debug
|
from jedi import debug
|
||||||
from jedi.evaluate import compiled
|
from jedi.evaluate import compiled
|
||||||
from jedi.evaluate.filters import ParserTreeFilter, ContextName, TreeNameDefinition
|
from jedi.evaluate.filters import ParserTreeFilter, ContextName, TreeNameDefinition
|
||||||
from jedi.evaluate.context import Context, LazyKnownContext
|
from jedi.evaluate.context import Context, LazyKnownContext
|
||||||
from jedi.evaluate.cache import memoize_default
|
from jedi.evaluate.cache import memoize_default
|
||||||
|
from jedi.cache import memoize_method
|
||||||
from jedi.evaluate import representation as er
|
from jedi.evaluate import representation as er
|
||||||
|
from jedi.evaluate.dynamic import search_params
|
||||||
|
|
||||||
|
|
||||||
class AbstractInstanceContext(Context):
|
class AbstractInstanceContext(Context):
|
||||||
@@ -181,6 +183,16 @@ class TreeInstance(AbstractInstanceContext):
|
|||||||
return class_context
|
return class_context
|
||||||
|
|
||||||
|
|
||||||
|
class AnonymousInstance(TreeInstance):
|
||||||
|
def __init__(self, evaluator, parent_context, class_context):
|
||||||
|
super(AnonymousInstance, self).__init__(
|
||||||
|
evaluator,
|
||||||
|
parent_context,
|
||||||
|
class_context,
|
||||||
|
var_args=None
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class CompiledInstanceClassFilter(compiled.CompiledObjectFilter):
|
class CompiledInstanceClassFilter(compiled.CompiledObjectFilter):
|
||||||
def __init__(self, evaluator, instance, compiled_object):
|
def __init__(self, evaluator, instance, compiled_object):
|
||||||
super(CompiledInstanceClassFilter, self).__init__(
|
super(CompiledInstanceClassFilter, self).__init__(
|
||||||
@@ -313,13 +325,19 @@ class InstanceVarArgs(object):
|
|||||||
self._instance = instance
|
self._instance = instance
|
||||||
self._var_args = var_args
|
self._var_args = var_args
|
||||||
|
|
||||||
|
@memoize_method
|
||||||
|
def get_var_args(self):
|
||||||
|
if self._var_args is None:
|
||||||
|
return search_params(self.evaluator, self.parent_context, self.funcdef)
|
||||||
|
return self._var_args
|
||||||
|
|
||||||
def unpack(self, func=None):
|
def unpack(self, func=None):
|
||||||
yield None, LazyKnownContext(self._instance)
|
yield None, LazyKnownContext(self._instance)
|
||||||
for values in self._var_args.unpack(func):
|
for values in self._get_var_args.unpack(func):
|
||||||
yield values
|
yield values
|
||||||
|
|
||||||
def get_calling_var_args(self):
|
def get_calling_var_args(self):
|
||||||
return self._var_args.get_calling_var_args()
|
return self._get_var_args().get_calling_var_args()
|
||||||
|
|
||||||
|
|
||||||
class InstanceFunctionExecution(er.FunctionExecutionContext):
|
class InstanceFunctionExecution(er.FunctionExecutionContext):
|
||||||
|
|||||||
Reference in New Issue
Block a user