diff --git a/jedi/evaluate/__init__.py b/jedi/evaluate/__init__.py index 4275d4be..4dafbe30 100644 --- a/jedi/evaluate/__init__.py +++ b/jedi/evaluate/__init__.py @@ -176,8 +176,10 @@ class Evaluator(object): elif isinstance(element, pr.Keyword): # For False/True/None return [compiled.builtin.get_by_name(element.value)] - elif isinstance(element, pr.Lambda): + elif element.isinstance(pr.Lambda): return [er.LambdaWrapper(self, element)] + elif element.isinstance(er.LambdaWrapper): + return [element] # TODO this is no real evaluation. elif element.type == 'power': types = self._eval_atom(element.children[0]) for trailer in element.children[1:]: diff --git a/jedi/evaluate/representation.py b/jedi/evaluate/representation.py index 1ae80a63..49312edc 100644 --- a/jedi/evaluate/representation.py +++ b/jedi/evaluate/representation.py @@ -54,7 +54,10 @@ def wrap(evaluator, element): if isinstance(element, pr.Class): return Class(evaluator, element) elif isinstance(element, pr.Function): - return Function(evaluator, element) + if isinstance(element, pr.Lambda): + return LambdaWrapper(evaluator, element) + else: + return Function(evaluator, element) elif isinstance(element, (pr.Module)) \ and not isinstance(element, ModuleWrapper): return ModuleWrapper(evaluator, element) @@ -543,7 +546,8 @@ class Function(use_metaclass(CachedMetaClass, Wrapper)): class LambdaWrapper(Function): - pass + def get_decorated_func(self): + return self class LazyDict(object): @@ -583,6 +587,9 @@ class FunctionExecution(Executed): def get_return_types(self, check_yields=False): func = self.base + if func.isinstance(LambdaWrapper): + return self._evaluator.eval_element(self.children[-1]) + if func.listeners: # Feed the listeners, with the params. for listener in func.listeners: @@ -592,9 +599,6 @@ class FunctionExecution(Executed): # inserted params, not in the actual execution of the function. return [] - if isinstance(func, LambdaWrapper): - return self._evaluator.eval_element(self.children[-1]) - if check_yields: types = [] returns = self.yields