From 40f4f032c612d4d3155b6f98bac16e6be031b0c0 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sat, 9 Sep 2017 20:13:03 +0200 Subject: [PATCH] Fix class/def/class nesting definitions Fixes #932. --- jedi/evaluate/instance.py | 5 ++++- test/completion/classes.py | 17 +++++++++++++++++ test/completion/lambdas.py | 7 +++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/jedi/evaluate/instance.py b/jedi/evaluate/instance.py index 1e35b11e..c0dae4d9 100644 --- a/jedi/evaluate/instance.py +++ b/jedi/evaluate/instance.py @@ -183,9 +183,12 @@ class AbstractInstanceContext(Context): else: bound_method = BoundMethod( self.evaluator, self, class_context, - self.parent_context, scope + parent_context, scope ) return bound_method.get_function_execution() + elif scope.type == 'classdef': + class_context = er.ClassContext(self.evaluator, scope, parent_context) + return class_context else: raise NotImplementedError return class_context diff --git a/test/completion/classes.py b/test/completion/classes.py index 03841628..ab7ea3ac 100644 --- a/test/completion/classes.py +++ b/test/completion/classes.py @@ -509,3 +509,20 @@ Config.mode #? int() Config.mode2 + + +# ----------------- +# Nested class/def/class +# ----------------- +class Foo(object): + a = 3 + def create_class(self): + class X(): + a = self.a + self.b = 3.0 + return X + +#? int() +Foo().create_class().a +#? float() +Foo().b diff --git a/test/completion/lambdas.py b/test/completion/lambdas.py index d7391691..524df0ce 100644 --- a/test/completion/lambdas.py +++ b/test/completion/lambdas.py @@ -65,6 +65,8 @@ class C(): def with_param(self): return lambda x: x + self.a() + lambd = lambda self: self.foo + #? int() C().a() @@ -75,6 +77,11 @@ index = C().with_param()(1) #? float() ['', 1, 1.0][index] +#? float() +C().lambd() +#? int() +C(1).lambd() + def xy(param): def ret(a, b):