From 2322edff8fb1c4dbebf315b6c2e2e954f2ff7ab6 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Wed, 5 Mar 2014 00:44:19 +0100 Subject: [PATCH] keyword statement not includes globals --- jedi/evaluate/finder.py | 4 ++-- jedi/parser/__init__.py | 21 ++++++++------------- jedi/parser/representation.py | 5 ++--- 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/jedi/evaluate/finder.py b/jedi/evaluate/finder.py index f2bb06c1f..88a96cc7c 100644 --- a/jedi/evaluate/finder.py +++ b/jedi/evaluate/finder.py @@ -185,9 +185,9 @@ def _remove_statements(self, stmt): types = [] if stmt.is_global(): # global keyword handling. - for token_name in stmt._token_list[1:]: + for token_name in stmt._token_list: if isinstance(token_name, pr.Name): - return evaluator.find_types(stmt.parent, str(token_name)) + return evaluator.find_types(stmt.parent.parent, str(token_name)) else: # Remove the statement docstr stuff for now, that has to be # implemented with the evaluator class. diff --git a/jedi/parser/__init__.py b/jedi/parser/__init__.py index 827f5f982..bc87890f8 100644 --- a/jedi/parser/__init__.py +++ b/jedi/parser/__init__.py @@ -563,16 +563,6 @@ class description. stmt.start_pos = s except AttributeError: debug.warning('return in non-function') - # globals - elif tok_str == 'global': - stmt, tok = self._parse_statement(self._gen.current) - if stmt: - self._scope.add_statement(stmt) - for t in stmt._token_list: - if isinstance(t, pr.Name): - # add the global to the top, because there it is - # important. - self.module.add_global(t) elif tok_str == 'assert': stmt, tok = self._parse_statement() if stmt is not None: @@ -580,9 +570,14 @@ class description. self._scope.asserts.append(stmt) elif tok_str in STATEMENT_KEYWORDS: stmt, _ = self._parse_statement() - k = pr.KeywordStatement(tok_str, tok.start_pos, - use_as_parent_scope, stmt) - self._scope.add_statement(k) + kw = pr.KeywordStatement(tok_str, tok.start_pos, + use_as_parent_scope, stmt) + self._scope.add_statement(kw) + if stmt is not None and tok_str == 'global': + for t in stmt._token_list: + if isinstance(t, pr.Name): + # Add the global to the top module, it counts there. + self.module.add_global(t) # decorator elif tok_str == '@': stmt, tok = self._parse_statement() diff --git a/jedi/parser/representation.py b/jedi/parser/representation.py index f2ad1c85b..0786effc4 100644 --- a/jedi/parser/representation.py +++ b/jedi/parser/representation.py @@ -913,9 +913,8 @@ def search_calls(calls): return self._set_vars + self.as_names def is_global(self): - # first keyword of the first token is global -> must be a global - tok = self._token_list[0] - return isinstance(tok, Name) and str(tok) == "global" + p = self.parent + return isinstance(p, KeywordStatement) and p.name == 'global' @property def assignment_details(self):