From bcd998ae02bb4bafda8bd564b1f9c1fa4598fb53 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Mon, 1 Dec 2014 11:49:52 +0100 Subject: [PATCH] Lambdas are own namespaces and deserve their own used_names dictionary in the parser. --- jedi/parser/__init__.py | 6 ++++-- jedi/parser/tree.py | 2 -- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/jedi/parser/__init__.py b/jedi/parser/__init__.py index 2ad5d7fc..9d7706e3 100644 --- a/jedi/parser/__init__.py +++ b/jedi/parser/__init__.py @@ -158,6 +158,8 @@ class Parser(object): # returned by convert multiple times. if symbol == 'global_stmt': self.global_names += new_node.get_defined_names() + elif isinstance(new_node, pt.Lambda): + new_node.names_dict = self.scope_names_stack.pop() elif isinstance(new_node, (pt.ClassOrFunc, pt.Module)) \ and symbol in ('funcdef', 'classdef', 'file_input'): # scope_name_stack handling @@ -180,7 +182,7 @@ class Parser(object): #print('leaf', value, pytree.type_repr(type)) if type == tokenize.NAME: if value in grammar.keywords: - if value in ('def', 'class'): + if value in ('def', 'class', 'lambda'): self.scope_names_stack.append({}) return pt.Keyword(value, start_pos, prefix) @@ -265,7 +267,7 @@ class Parser(object): if found: symbol = grammar.number2symbol[typ] failed_stack.append((symbol, nodes)) - if nodes and nodes[0] in ('def', 'class'): + if nodes and nodes[0] in ('def', 'class', 'lambda'): self.scope_names_stack.pop() if failed_stack: err = ErrorStatement(failed_stack, value, start_pos) diff --git a/jedi/parser/tree.py b/jedi/parser/tree.py index befddf4d..4cb933c1 100644 --- a/jedi/parser/tree.py +++ b/jedi/parser/tree.py @@ -880,8 +880,6 @@ class Lambda(Function): self.listeners = set() # not used here, but in evaluation. lst = self.children[1:-2] # After `def foo` self.params = _create_params(self, lst) - self.names_dict = dict((str(param.name), [param.name]) - for param in self.params) def is_generator(self): return False