diff --git a/jedi/parsing.py b/jedi/parsing.py index c9e60259..7e5738c3 100644 --- a/jedi/parsing.py +++ b/jedi/parsing.py @@ -344,6 +344,7 @@ class Parser(object): breaks |= set(added_breaks) tok_list = [] + as_names = [] while not (tok in always_break or tok in not_first_break and not tok_list or tok in breaks and level <= 0): @@ -356,6 +357,7 @@ class Parser(object): n, token_type, tok = self._parse_dot_name(self._current) if n: set_vars.append(n) + as_names.append(n) tok_list.append(n) continue elif tok in ['lambda', 'for', 'in']: @@ -394,7 +396,7 @@ class Parser(object): return None, tok else: stmt = stmt_class(self.module, set_vars, used_vars, tok_list, - first_pos, self.end_pos) + first_pos, self.end_pos, as_names=as_names) stmt.parent = self.top_module self._check_user_stmt(stmt) @@ -597,13 +599,13 @@ class Parser(object): and tok not in [':', '\n']: statement, tok = \ self._parse_statement(added_breaks=added_breaks) - if command == 'except' and tok in added_breaks: + if command == 'except' and tok == ',': # the except statement defines a var # this is only true for python 2 n, token_type, tok = self._parse_dot_name() if n: n.parent = statement - statement.set_vars.append(n) + statement.as_names.append(n) if statement: inputs.append(statement) first = False diff --git a/jedi/parsing_representation.py b/jedi/parsing_representation.py index 158d7850..3b1fab92 100644 --- a/jedi/parsing_representation.py +++ b/jedi/parsing_representation.py @@ -758,11 +758,11 @@ class Statement(Simple): :param start_pos: Position (line, column) of the Statement. """ __slots__ = ('token_list', 'used_vars', - '_set_vars', '_commands', '_assignment_details', + '_set_vars', 'as_names', '_commands', '_assignment_details', 'docstr') def __init__(self, module, set_vars, used_vars, token_list, - start_pos, end_pos, parent=None, set_name_parents=True): + start_pos, end_pos, parent=None, as_names=(), set_name_parents=True): super(Statement, self).__init__(module, start_pos, end_pos) self.used_vars = used_vars self.token_list = token_list @@ -770,9 +770,12 @@ class Statement(Simple): for t in token_list: if isinstance(t, Name): t.parent = self.use_as_parent + for n in as_names: + n.parent = self.use_as_parent self.parent = parent self.docstr = '' self._set_vars = None + self.as_names = list(as_names) # cache self._commands = None @@ -810,7 +813,7 @@ class Statement(Simple): for calls, operation in self.assignment_details: search_calls(calls) self._set_vars = _set_vars - return self._set_vars + return self._set_vars + self.as_names def get_code(self, new_line=True): def assemble(command_list, assignment=None):