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

Side by Side 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 unified diff | Download patch
OLDNEW
(Empty)
1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 # pylint: disable=wildcard-import
6 from catapult_base.refactor.annotated_symbol.class_definition import *
7 from catapult_base.refactor.annotated_symbol.function_definition import *
8 from catapult_base.refactor.annotated_symbol.import_statement import *
9 from catapult_base.refactor.annotated_symbol.reference import *
10 from catapult_base.refactor import snippet
11
12
13 __all__ = [
14 'Annotate',
15
16 'Class',
17 'Function',
18 'Import',
19 'Reference',
20 ]
21
22
23 # Specific symbol types with extra methods for manipulating them.
24 # Python's full grammar is here:
25 # https://docs.python.org/2/reference/grammar.html
26
27 # Annotated Symbols have an Annotate classmethod that takes a symbol type and
28 # list of children, and returns an instance of that annotated Symbol.
29
30 ANNOTATED_SYMBOLS = (
31 AsName,
32 Class,
33 DottedName,
34 ImportFrom,
35 ImportName,
36 Function,
37 )
38
39
40 # Unfortunately, some logical groupings are not represented by a node in the
41 # parse tree. To work around this, some annotated Symbols have an Annotate
42 # classmethod that takes and returns a list of Snippets instead.
43
44 ANNOTATED_GROUPINGS = (
45 Reference,
46 )
47
48
49 def Annotate(f):
50 """Return the syntax tree of the given file."""
51 return _AnnotateNode(snippet.Snippetize(f))
52
53
54 def _AnnotateNode(node):
55 if not isinstance(node, snippet.Symbol):
56 return node
57
58 children = map(_AnnotateNode, node.children)
59
60 for symbol_type in ANNOTATED_GROUPINGS:
61 annotated_grouping = symbol_type.Annotate(children)
62 if annotated_grouping:
63 children = annotated_grouping
64 break
65
66 for symbol_type in ANNOTATED_SYMBOLS:
67 annotated_symbol = symbol_type.Annotate(node.type, children)
68 if annotated_symbol:
69 return annotated_symbol
70
71 return snippet.Symbol(node.type, children)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698