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

Unified Diff: tools/telemetry/catapult_base/refactor/annotated_symbol/__init__.py

Issue 1620023002: Revert of Remove catapult_base from telemetry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@perf_cb_move
Patch Set: Created 4 years, 11 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/catapult_base/refactor/annotated_symbol/__init__.py
diff --git a/tools/telemetry/catapult_base/refactor/annotated_symbol/__init__.py b/tools/telemetry/catapult_base/refactor/annotated_symbol/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..32858b523d5275aecb0abd21efe11e568c9a87be
--- /dev/null
+++ b/tools/telemetry/catapult_base/refactor/annotated_symbol/__init__.py
@@ -0,0 +1,71 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# pylint: disable=wildcard-import
+from catapult_base.refactor.annotated_symbol.class_definition import *
+from catapult_base.refactor.annotated_symbol.function_definition import *
+from catapult_base.refactor.annotated_symbol.import_statement import *
+from catapult_base.refactor.annotated_symbol.reference import *
+from catapult_base.refactor import snippet
+
+
+__all__ = [
+ 'Annotate',
+
+ 'Class',
+ 'Function',
+ 'Import',
+ 'Reference',
+]
+
+
+# Specific symbol types with extra methods for manipulating them.
+# Python's full grammar is here:
+# https://docs.python.org/2/reference/grammar.html
+
+# Annotated Symbols have an Annotate classmethod that takes a symbol type and
+# list of children, and returns an instance of that annotated Symbol.
+
+ANNOTATED_SYMBOLS = (
+ AsName,
+ Class,
+ DottedName,
+ ImportFrom,
+ ImportName,
+ Function,
+)
+
+
+# Unfortunately, some logical groupings are not represented by a node in the
+# parse tree. To work around this, some annotated Symbols have an Annotate
+# classmethod that takes and returns a list of Snippets instead.
+
+ANNOTATED_GROUPINGS = (
+ Reference,
+)
+
+
+def Annotate(f):
+ """Return the syntax tree of the given file."""
+ return _AnnotateNode(snippet.Snippetize(f))
+
+
+def _AnnotateNode(node):
+ if not isinstance(node, snippet.Symbol):
+ return node
+
+ children = map(_AnnotateNode, node.children)
+
+ for symbol_type in ANNOTATED_GROUPINGS:
+ annotated_grouping = symbol_type.Annotate(children)
+ if annotated_grouping:
+ children = annotated_grouping
+ break
+
+ for symbol_type in ANNOTATED_SYMBOLS:
+ annotated_symbol = symbol_type.Annotate(node.type, children)
+ if annotated_symbol:
+ return annotated_symbol
+
+ return snippet.Symbol(node.type, children)

Powered by Google App Engine
This is Rietveld 408576698