Progress in creating anonymous instances.

This commit is contained in:
Dave Halter
2016-11-07 01:11:55 +01:00
parent 81ccedc353
commit 40f599c3b6
2 changed files with 25 additions and 7 deletions

View File

@@ -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

View File

@@ -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):