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 helpers
from jedi.evaluate.context import Context
from jedi.evaluate.instance import AnonymousInstance
class Evaluator(object):
@@ -528,13 +529,12 @@ class Evaluator(object):
elif is_funcdef:
return er.AnonymousFunctionExecution(self, parent_context, scope_node)
elif scope_node.type == 'classdef':
class_context = er.ClassContext(self, scope_node, parent_context)
if child_is_funcdef:
# anonymous instance
raise NotImplementedError
return AnonymousInstance(self, parent_context, class_context)
else:
return er.ClassContext(self, scope_node, parent_context)
raise DeprecationWarning
return self.wrap(scope, parent_context=parent_context)
return class_context
if node.is_scope():
scope_node = node

View File

@@ -1,12 +1,14 @@
from abc import abstractproperty
from jedi.common import unite, to_list
from jedi.common import unite
from jedi import debug
from jedi.evaluate import compiled
from jedi.evaluate.filters import ParserTreeFilter, ContextName, TreeNameDefinition
from jedi.evaluate.context import Context, LazyKnownContext
from jedi.evaluate.cache import memoize_default
from jedi.cache import memoize_method
from jedi.evaluate import representation as er
from jedi.evaluate.dynamic import search_params
class AbstractInstanceContext(Context):
@@ -181,6 +183,16 @@ class TreeInstance(AbstractInstanceContext):
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):
def __init__(self, evaluator, instance, compiled_object):
super(CompiledInstanceClassFilter, self).__init__(
@@ -313,13 +325,19 @@ class InstanceVarArgs(object):
self._instance = instance
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):
yield None, LazyKnownContext(self._instance)
for values in self._var_args.unpack(func):
for values in self._get_var_args.unpack(func):
yield values
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):