From 357c86ad9cd808af5bd917bb469f845bd4e05608 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sun, 5 Aug 2018 14:57:00 +0200 Subject: [PATCH] Use the InstanceArguments for super as well --- jedi/evaluate/context/instance.py | 4 ++-- jedi/evaluate/stdlib.py | 15 ++++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/jedi/evaluate/context/instance.py b/jedi/evaluate/context/instance.py index 3c08bfab..35b32936 100644 --- a/jedi/evaluate/context/instance.py +++ b/jedi/evaluate/context/instance.py @@ -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 diff --git a/jedi/evaluate/stdlib.py b/jedi/evaluate/stdlib.py index 06296d93..93977189 100644 --- a/jedi/evaluate/stdlib.py +++ b/jedi/evaluate/stdlib.py @@ -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