| commit 1433: | 45e92972ac83 |
| parent 1432: | 7bd0e1aef1fb |
| branch: | trunk |
evaluate: cleaning up
22 months ago
Changed (Δ103 bytes):
raw changeset »
rope/base/evaluate.py (16 lines added, 19 lines removed)
Up to file-list rope/base/evaluate.py:
| … | … | @@ -47,27 +47,26 @@ def eval_str2(holding_scope, name): |
47 |
47 |
class ScopeNameFinder(object): |
48 |
48 |
|
49 |
49 |
def __init__(self, pymodule): |
50 |
self.source_code = pymodule.source_code |
|
51 |
50 |
self.module_scope = pymodule.get_scope() |
52 |
51 |
self.lines = pymodule.lines |
53 |
self.word |
|
52 |
self.worder = worder.Worder(pymodule.source_code, True) |
|
54 |
53 |
|
55 |
54 |
def _is_defined_in_class_body(self, holding_scope, offset, lineno): |
56 |
55 |
if lineno == holding_scope.get_start() and \ |
57 |
56 |
holding_scope.parent is not None and \ |
58 |
57 |
holding_scope.parent.get_kind() == 'Class' and \ |
59 |
self.word |
|
58 |
self.worder.is_a_class_or_function_name_in_header(offset): |
|
60 |
59 |
return True |
61 |
60 |
if lineno != holding_scope.get_start() and \ |
62 |
61 |
holding_scope.get_kind() == 'Class' and \ |
63 |
self.word |
|
62 |
self.worder.is_name_assigned_in_class_body(offset): |
|
64 |
63 |
return True |
65 |
64 |
return False |
66 |
65 |
|
67 |
66 |
def _is_function_name_in_function_header(self, scope, offset, lineno): |
68 |
67 |
if scope.get_start() <= lineno <= scope.get_body_start() and \ |
69 |
68 |
scope.get_kind() == 'Function' and \ |
70 |
self.word |
|
69 |
self.worder.is_a_class_or_function_name_in_header(offset): |
|
71 |
70 |
return True |
72 |
71 |
return False |
73 |
72 |
|
| … | … | @@ -78,39 +77,38 @@ class ScopeNameFinder(object): |
78 |
77 |
lineno = self.lines.get_line_number(offset) |
79 |
78 |
holding_scope = self.module_scope.get_inner_scope_for_line(lineno) |
80 |
79 |
# function keyword parameter |
81 |
if self.word_finder.is_function_keyword_parameter(offset): |
|
82 |
keyword_name = self.word_finder.get_word_at(offset) |
|
80 |
if self.worder.is_function_keyword_parameter(offset): |
|
81 |
keyword_name = self.worder.get_word_at(offset) |
|
83 |
82 |
pyobject = self.get_enclosing_function(offset) |
84 |
83 |
if isinstance(pyobject, pyobjects.PyFunction): |
85 |
84 |
return (None, pyobject.get_parameters().get(keyword_name, None)) |
86 |
||
87 |
85 |
# class body |
88 |
86 |
if self._is_defined_in_class_body(holding_scope, offset, lineno): |
89 |
87 |
class_scope = holding_scope |
90 |
88 |
if lineno == holding_scope.get_start(): |
91 |
89 |
class_scope = holding_scope.parent |
92 |
name = self.word |
|
90 |
name = self.worder.get_primary_at(offset).strip() |
|
93 |
91 |
try: |
94 |
92 |
return (None, class_scope.pyobject[name]) |
95 |
93 |
except rope.base.exceptions.AttributeNotFoundError: |
96 |
94 |
return (None, None) |
97 |
95 |
# function header |
98 |
96 |
if self._is_function_name_in_function_header(holding_scope, offset, lineno): |
99 |
name = self.word |
|
97 |
name = self.worder.get_primary_at(offset).strip() |
|
100 |
98 |
return (None, holding_scope.parent[name]) |
101 |
99 |
# from statement module |
102 |
if self.word_finder.is_from_statement_module(offset): |
|
103 |
module = self.word_finder.get_primary_at(offset) |
|
100 |
if self.worder.is_from_statement_module(offset): |
|
101 |
module = self.worder.get_primary_at(offset) |
|
104 |
102 |
module_pyname = self._find_module(module) |
105 |
103 |
return (None, module_pyname) |
106 |
if self.word_finder.is_from_aliased(offset): |
|
107 |
name = self.word_finder.get_from_aliased(offset) |
|
104 |
if self.worder.is_from_aliased(offset): |
|
105 |
name = self.worder.get_from_aliased(offset) |
|
108 |
106 |
else: |
109 |
name = self.word |
|
107 |
name = self.worder.get_primary_at(offset) |
|
110 |
108 |
return eval_str2(holding_scope, name) |
111 |
109 |
|
112 |
110 |
def get_enclosing_function(self, offset): |
113 |
function_parens = self.word |
|
111 |
function_parens = self.worder.find_parens_start_from_inside(offset) |
|
114 |
112 |
try: |
115 |
113 |
function_pyname = self.get_pyname_at(function_parens - 1) |
116 |
114 |
except BadIdentifierError: |
| … | … | @@ -250,9 +248,8 @@ class StatementEvaluator(object): |
250 |
248 |
module = scope.pyobject.get_module() |
251 |
249 |
names = {} |
252 |
250 |
for comp in node.generators: |
253 |
new_names = _get_evaluated_names( |
|
254 |
comp.target, comp.iter, module, |
|
255 |
|
|
251 |
new_names = _get_evaluated_names(comp.target, comp.iter, module, |
|
252 |
'.__iter__().next()', node.lineno) |
|
256 |
253 |
names.update(new_names) |
257 |
254 |
return rope.base.pyscopes.TemporaryScope(scope.pycore, scope, names) |
258 |
255 |
