Use the InstanceArguments for super as well

This commit is contained in:
Dave Halter
2018-08-05 14:57:00 +02:00
parent 8cae517821
commit 357c86ad9c
2 changed files with 12 additions and 7 deletions

View File

@@ -454,7 +454,7 @@ class SelfAttributeFilter(ClassFilter):
class InstanceArguments(AbstractArguments):
def __init__(self, instance, var_args):
self._instance = instance
self.instance = instance
self._var_args = var_args
@property
@@ -466,7 +466,7 @@ class InstanceArguments(AbstractArguments):
return self._var_args.trailer
def unpack(self, func=None):
yield None, LazyKnownContext(self._instance)
yield None, LazyKnownContext(self.instance)
for values in self._var_args.unpack(func):
yield values

View File

@@ -18,12 +18,12 @@ from jedi import debug
from jedi.evaluate.arguments import ValuesArguments
from jedi.evaluate import analysis
from jedi.evaluate import compiled
from jedi.evaluate.context.instance import InstanceFunctionExecution, \
from jedi.evaluate.context.instance import \
AbstractInstanceContext, CompiledInstance, BoundMethod, \
AnonymousInstanceFunctionExecution
AnonymousInstanceFunctionExecution, InstanceArguments
from jedi.evaluate.base_context import ContextualizedNode, \
NO_CONTEXTS, ContextSet
from jedi.evaluate.context import ClassContext, ModuleContext
from jedi.evaluate.context import ClassContext, ModuleContext, FunctionExecutionContext
from jedi.evaluate.context import iterable
from jedi.evaluate.lazy_context import LazyTreeContext
from jedi.evaluate.syntax_tree import is_string
@@ -187,10 +187,15 @@ class SuperInstance(AbstractInstanceContext):
@argument_clinic('[type[, obj]], /', want_context=True)
def builtins_super(evaluator, types, objects, context):
# TODO make this able to detect multiple inheritance super
if isinstance(context, (InstanceFunctionExecution,
AnonymousInstanceFunctionExecution)):
if isinstance(context, FunctionExecutionContext):
if isinstance(context.var_args, InstanceArguments):
su = context.var_args.instance.py__class__().py__bases__()
return su[0].infer().execute_evaluated()
if isinstance(context, AnonymousInstanceFunctionExecution):
su = context.instance.py__class__().py__bases__()
return su[0].infer().execute_evaluated()
return NO_CONTEXTS