Skip to content

Commit

Permalink
moved global variables handling
Browse files Browse the repository at this point in the history
  • Loading branch information
davidhalter committed Mar 5, 2014
1 parent 2322edf commit 5f8f1e1
Showing 1 changed file with 26 additions and 27 deletions.
53 changes: 26 additions & 27 deletions jedi/evaluate/finder.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,9 +148,10 @@ def _names_to_types(self, names, resolve_decorator):
types = []
# Add isinstance and other if/assert knowledge.
flow_scope = self.scope
evaluator = self._evaluator
while flow_scope:
# TODO check if result is in scope -> no evaluation necessary
n = check_flow_information(self._evaluator, flow_scope,
n = check_flow_information(evaluator, flow_scope,
self.name_str, self.position)
if n:
return n
Expand All @@ -163,12 +164,16 @@ def _names_to_types(self, names, resolve_decorator):
elif isinstance(typ, pr.Param):
types += self._eval_param(typ)
elif typ.isinstance(pr.Statement):
types += self._remove_statements(typ)
if typ.is_global():
# global keyword handling.
types += evaluator.find_types(typ.parent.parent, str(name))
else:
types += self._remove_statements(typ)
else:
if isinstance(typ, pr.Class):
typ = er.Class(self._evaluator, typ)
typ = er.Class(evaluator, typ)
elif isinstance(typ, pr.Function):
typ = er.Function(self._evaluator, typ)
typ = er.Function(evaluator, typ)
if typ.isinstance(er.Function) and resolve_decorator:
typ = typ.get_decorated_func()
types.append(typ)
Expand All @@ -183,29 +188,23 @@ def _remove_statements(self, stmt):
"""
evaluator = self._evaluator
types = []
if stmt.is_global():
# global keyword handling.
for token_name in stmt._token_list:
if isinstance(token_name, pr.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.
#if stmt.docstr:
#res_new.append(stmt)

check_instance = None
if isinstance(stmt, er.InstanceElement) and stmt.is_class_var:
check_instance = stmt.instance
stmt = stmt.var

types += evaluator.eval_statement(stmt, seek_name=self.name_str)

if check_instance is not None:
# class renames
types = [er.InstanceElement(evaluator, check_instance, a, True)
if isinstance(a, (er.Function, pr.Function))
else a for a in types]
# Remove the statement docstr stuff for now, that has to be
# implemented with the evaluator class.
#if stmt.docstr:
#res_new.append(stmt)

check_instance = None
if isinstance(stmt, er.InstanceElement) and stmt.is_class_var:
check_instance = stmt.instance
stmt = stmt.var

types += evaluator.eval_statement(stmt, seek_name=self.name_str)

if check_instance is not None:
# class renames
types = [er.InstanceElement(evaluator, check_instance, a, True)
if isinstance(a, (er.Function, pr.Function))
else a for a in types]
return types

def _eval_param(self, r):
Expand Down

0 comments on commit 5f8f1e1

Please sign in to comment.