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

Unified Diff: tools/telemetry/third_party/rope/rope/base/ast.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 side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/third_party/rope/rope/base/ast.py
diff --git a/tools/telemetry/third_party/rope/rope/base/ast.py b/tools/telemetry/third_party/rope/rope/base/ast.py
new file mode 100644
index 0000000000000000000000000000000000000000..d43c83c55bed265f936352df2393c52d059d81d4
--- /dev/null
+++ b/tools/telemetry/third_party/rope/rope/base/ast.py
@@ -0,0 +1,76 @@
+import _ast
+from _ast import *
+
+from rope.base import fscommands
+
+try:
+ unicode
+except NameError:
+ unicode = str
+
+
+def parse(source, filename='<string>'):
+ # NOTE: the raw string should be given to `compile` function
+ if isinstance(source, unicode):
+ source = fscommands.unicode_to_file_data(source)
+ if b'\r' in source:
+ source = source.replace(b'\r\n', b'\n').replace(b'\r', b'\n')
+ if not source.endswith(b'\n'):
+ source += b'\n'
+ try:
+ return compile(source, filename, 'exec', _ast.PyCF_ONLY_AST)
+ except (TypeError, ValueError) as e:
+ error = SyntaxError()
+ error.lineno = 1
+ error.filename = filename
+ error.msg = str(e)
+ raise error
+
+
+def walk(node, walker):
+ """Walk the syntax tree"""
+ method_name = '_' + node.__class__.__name__
+ method = getattr(walker, method_name, None)
+ if method is not None:
+ if isinstance(node, _ast.ImportFrom) and node.module is None:
+ # In python < 2.7 ``node.module == ''`` for relative imports
+ # but for python 2.7 it is None. Generalizing it to ''.
+ node.module = ''
+ return method(node)
+ for child in get_child_nodes(node):
+ walk(child, walker)
+
+
+def get_child_nodes(node):
+ if isinstance(node, _ast.Module):
+ return node.body
+ result = []
+ if node._fields is not None:
+ for name in node._fields:
+ child = getattr(node, name)
+ if isinstance(child, list):
+ for entry in child:
+ if isinstance(entry, _ast.AST):
+ result.append(entry)
+ if isinstance(child, _ast.AST):
+ result.append(child)
+ return result
+
+
+def call_for_nodes(node, callback, recursive=False):
+ """If callback returns `True` the child nodes are skipped"""
+ result = callback(node)
+ if recursive and not result:
+ for child in get_child_nodes(node):
+ call_for_nodes(child, callback, recursive)
+
+
+def get_children(node):
+ result = []
+ if node._fields is not None:
+ for name in node._fields:
+ if name in ['lineno', 'col_offset']:
+ continue
+ child = getattr(node, name)
+ result.append(child)
+ return result
« no previous file with comments | « tools/telemetry/third_party/rope/rope/base/arguments.py ('k') | tools/telemetry/third_party/rope/rope/base/astutils.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698