agr / rope_py3k (http://rope.sf.net/)

A python refactoring library; py3k branch.

Clone this repository (size: 3.4 MB): HTTPS / SSH
$ hg clone http://bitbucket.org/agr/rope_py3k/
commit 1433: 45e92972ac83
parent 1432: 7bd0e1aef1fb
branch: trunk
evaluate: cleaning up
Ali Gholami Rudi
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_finder = worder.Worder(self.source_code, True)
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_finder.is_a_class_or_function_name_in_header(offset):
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_finder.is_name_assigned_in_class_body(offset):
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_finder.is_a_class_or_function_name_in_header(offset):
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_finder.get_primary_at(offset).strip()
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_finder.get_primary_at(offset).strip()
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_finder.get_primary_at(offset)
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_finder.find_parens_start_from_inside(offset)
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
                '.__iter__().next()', node.lineno)
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