/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/include/clang/AST/ASTDumperUtils.h
Line | Count | Source |
1 | | //===--- ASTDumperUtils.h - Printing of AST nodes -------------------------===// |
2 | | // |
3 | | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
4 | | // See https://llvm.org/LICENSE.txt for license information. |
5 | | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
6 | | // |
7 | | //===----------------------------------------------------------------------===// |
8 | | // |
9 | | // This file implements AST utilities for traversal down the tree. |
10 | | // |
11 | | //===----------------------------------------------------------------------===// |
12 | | |
13 | | #ifndef LLVM_CLANG_AST_ASTDUMPERUTILS_H |
14 | | #define LLVM_CLANG_AST_ASTDUMPERUTILS_H |
15 | | |
16 | | #include "llvm/Support/raw_ostream.h" |
17 | | |
18 | | namespace clang { |
19 | | |
20 | | /// Used to specify the format for printing AST dump information. |
21 | | enum ASTDumpOutputFormat { |
22 | | ADOF_Default, |
23 | | ADOF_JSON |
24 | | }; |
25 | | |
26 | | // Colors used for various parts of the AST dump |
27 | | // Do not use bold yellow for any text. It is hard to read on white screens. |
28 | | |
29 | | struct TerminalColor { |
30 | | llvm::raw_ostream::Colors Color; |
31 | | bool Bold; |
32 | | }; |
33 | | |
34 | | // Red - CastColor |
35 | | // Green - TypeColor |
36 | | // Bold Green - DeclKindNameColor, UndeserializedColor |
37 | | // Yellow - AddressColor, LocationColor |
38 | | // Blue - CommentColor, NullColor, IndentColor |
39 | | // Bold Blue - AttrColor |
40 | | // Bold Magenta - StmtColor |
41 | | // Cyan - ValueKindColor, ObjectKindColor |
42 | | // Bold Cyan - ValueColor, DeclNameColor |
43 | | |
44 | | // Decl kind names (VarDecl, FunctionDecl, etc) |
45 | | static const TerminalColor DeclKindNameColor = {llvm::raw_ostream::GREEN, true}; |
46 | | // Attr names (CleanupAttr, GuardedByAttr, etc) |
47 | | static const TerminalColor AttrColor = {llvm::raw_ostream::BLUE, true}; |
48 | | // Statement names (DeclStmt, ImplicitCastExpr, etc) |
49 | | static const TerminalColor StmtColor = {llvm::raw_ostream::MAGENTA, true}; |
50 | | // Comment names (FullComment, ParagraphComment, TextComment, etc) |
51 | | static const TerminalColor CommentColor = {llvm::raw_ostream::BLUE, false}; |
52 | | |
53 | | // Type names (int, float, etc, plus user defined types) |
54 | | static const TerminalColor TypeColor = {llvm::raw_ostream::GREEN, false}; |
55 | | |
56 | | // Pointer address |
57 | | static const TerminalColor AddressColor = {llvm::raw_ostream::YELLOW, false}; |
58 | | // Source locations |
59 | | static const TerminalColor LocationColor = {llvm::raw_ostream::YELLOW, false}; |
60 | | |
61 | | // lvalue/xvalue |
62 | | static const TerminalColor ValueKindColor = {llvm::raw_ostream::CYAN, false}; |
63 | | // bitfield/objcproperty/objcsubscript/vectorcomponent |
64 | | static const TerminalColor ObjectKindColor = {llvm::raw_ostream::CYAN, false}; |
65 | | // contains-errors |
66 | | static const TerminalColor ErrorsColor = {llvm::raw_ostream::RED, true}; |
67 | | |
68 | | // Null statements |
69 | | static const TerminalColor NullColor = {llvm::raw_ostream::BLUE, false}; |
70 | | |
71 | | // Undeserialized entities |
72 | | static const TerminalColor UndeserializedColor = {llvm::raw_ostream::GREEN, |
73 | | true}; |
74 | | |
75 | | // CastKind from CastExpr's |
76 | | static const TerminalColor CastColor = {llvm::raw_ostream::RED, false}; |
77 | | |
78 | | // Value of the statement |
79 | | static const TerminalColor ValueColor = {llvm::raw_ostream::CYAN, true}; |
80 | | // Decl names |
81 | | static const TerminalColor DeclNameColor = {llvm::raw_ostream::CYAN, true}; |
82 | | |
83 | | // Indents ( `, -. | ) |
84 | | static const TerminalColor IndentColor = {llvm::raw_ostream::BLUE, false}; |
85 | | |
86 | | class ColorScope { |
87 | | llvm::raw_ostream &OS; |
88 | | const bool ShowColors; |
89 | | |
90 | | public: |
91 | | ColorScope(llvm::raw_ostream &OS, bool ShowColors, TerminalColor Color) |
92 | 538k | : OS(OS), ShowColors(ShowColors) { |
93 | 538k | if (ShowColors) |
94 | 516 | OS.changeColor(Color.Color, Color.Bold); |
95 | 538k | } |
96 | 538k | ~ColorScope() { |
97 | 538k | if (ShowColors) |
98 | 516 | OS.resetColor(); |
99 | 538k | } |
100 | | }; |
101 | | |
102 | | } // namespace clang |
103 | | |
104 | | #endif // LLVM_CLANG_AST_ASTDUMPERUTILS_H |