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

Unified Diff: tools/telemetry/catapult_base/refactor/annotated_symbol/reference.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/reference.py
diff --git a/tools/telemetry/catapult_base/refactor/annotated_symbol/reference.py b/tools/telemetry/catapult_base/refactor/annotated_symbol/reference.py
new file mode 100644
index 0000000000000000000000000000000000000000..b57c4f513206ed965e8c479c5b20c28451038187
--- /dev/null
+++ b/tools/telemetry/catapult_base/refactor/annotated_symbol/reference.py
@@ -0,0 +1,75 @@
+# 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.
+
+import itertools
+import symbol
+import token
+
+from catapult_base.refactor.annotated_symbol import base_symbol
+from catapult_base.refactor import snippet
+
+
+__all__ = [
+ 'Reference',
+]
+
+
+class Reference(base_symbol.AnnotatedSymbol):
+ @classmethod
+ def Annotate(cls, nodes):
+ if not nodes:
+ return None
+ if nodes[0].type != symbol.atom:
+ return None
+ if not nodes[0].children or nodes[0].children[0].type != token.NAME:
+ return None
+
+ for i in xrange(1, len(nodes)):
+ if not nodes:
+ break
+ if nodes[i].type != symbol.trailer:
+ break
+ if len(nodes[i].children) != 2:
+ break
+ if (nodes[i].children[0].type != token.DOT or
+ nodes[i].children[1].type != token.NAME):
+ break
+ else:
+ i = len(nodes)
+
+ return [cls(nodes[:i])] + nodes[i:]
+
+ def __init__(self, children):
+ super(Reference, self).__init__(-1, children)
+
+ @property
+ def type_name(self):
+ return 'attribute_reference'
+
+ @property
+ def value(self):
+ return ''.join(token_snippet.value
+ for child in self.children
+ for token_snippet in child.children)
+
+ @value.setter
+ def value(self, value):
+ value_parts = value.split('.')
+
+ # If we have too many children, cut the list down to size.
+ self._children = self._children[:len(value_parts)]
+
+ # Update child nodes.
+ for child, value_part in itertools.izip_longest(
+ self._children, value_parts):
+ if child:
+ # Modify existing children. This helps preserve comments and spaces.
+ child.children[-1].value = value_part
+ else:
+ # Add children as needed.
+ token_snippets = [
+ snippet.TokenSnippet.Create(token.DOT, '.'),
+ snippet.TokenSnippet.Create(token.NAME, value_part),
+ ]
+ self._children.append(snippet.Symbol(symbol.trailer, token_snippets))

Powered by Google App Engine
This is Rietveld 408576698