Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Side by Side Diff: tools/telemetry/third_party/rope/rope/base/astutils.py

Issue 1132103009: Example of refactoring using rope library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 from rope.base import ast
2
3
4 def get_name_levels(node):
5 """Return a list of ``(name, level)`` tuples for assigned names
6
7 The `level` is `None` for simple assignments and is a list of
8 numbers for tuple assignments for example in::
9
10 a, (b, c) = x
11
12 The levels for for `a` is ``[0]``, for `b` is ``[1, 0]`` and for
13 `c` is ``[1, 1]``.
14
15 """
16 visitor = _NodeNameCollector()
17 ast.walk(node, visitor)
18 return visitor.names
19
20
21 class _NodeNameCollector(object):
22
23 def __init__(self, levels=None):
24 self.names = []
25 self.levels = levels
26 self.index = 0
27
28 def _add_node(self, node):
29 new_levels = []
30 if self.levels is not None:
31 new_levels = list(self.levels)
32 new_levels.append(self.index)
33 self.index += 1
34 self._added(node, new_levels)
35
36 def _added(self, node, levels):
37 if hasattr(node, 'id'):
38 self.names.append((node.id, levels))
39
40 def _Name(self, node):
41 self._add_node(node)
42
43 def _Tuple(self, node):
44 new_levels = []
45 if self.levels is not None:
46 new_levels = list(self.levels)
47 new_levels.append(self.index)
48 self.index += 1
49 visitor = _NodeNameCollector(new_levels)
50 for child in ast.get_child_nodes(node):
51 ast.walk(child, visitor)
52 self.names.extend(visitor.names)
53
54 def _Subscript(self, node):
55 self._add_node(node)
56
57 def _Attribute(self, node):
58 self._add_node(node)
59
60 def _Slice(self, node):
61 self._add_node(node)
OLDNEW
« no previous file with comments | « tools/telemetry/third_party/rope/rope/base/ast.py ('k') | tools/telemetry/third_party/rope/rope/base/builtins.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698