10b57cec5SDimitry Andric //===--- ASTDumperUtils.h - Printing of AST nodes -------------------------===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric // 90b57cec5SDimitry Andric // This file implements AST utilities for traversal down the tree. 100b57cec5SDimitry Andric // 110b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric #ifndef LLVM_CLANG_AST_ASTDUMPERUTILS_H 140b57cec5SDimitry Andric #define LLVM_CLANG_AST_ASTDUMPERUTILS_H 150b57cec5SDimitry Andric 160b57cec5SDimitry Andric #include "llvm/Support/raw_ostream.h" 170b57cec5SDimitry Andric 180b57cec5SDimitry Andric namespace clang { 190b57cec5SDimitry Andric 200b57cec5SDimitry Andric /// Used to specify the format for printing AST dump information. 210b57cec5SDimitry Andric enum ASTDumpOutputFormat { 220b57cec5SDimitry Andric ADOF_Default, 230b57cec5SDimitry Andric ADOF_JSON 240b57cec5SDimitry Andric }; 250b57cec5SDimitry Andric 260b57cec5SDimitry Andric // Colors used for various parts of the AST dump 270b57cec5SDimitry Andric // Do not use bold yellow for any text. It is hard to read on white screens. 280b57cec5SDimitry Andric 290b57cec5SDimitry Andric struct TerminalColor { 300b57cec5SDimitry Andric llvm::raw_ostream::Colors Color; 310b57cec5SDimitry Andric bool Bold; 320b57cec5SDimitry Andric }; 330b57cec5SDimitry Andric 340b57cec5SDimitry Andric // Red - CastColor 350b57cec5SDimitry Andric // Green - TypeColor 360b57cec5SDimitry Andric // Bold Green - DeclKindNameColor, UndeserializedColor 370b57cec5SDimitry Andric // Yellow - AddressColor, LocationColor 380b57cec5SDimitry Andric // Blue - CommentColor, NullColor, IndentColor 390b57cec5SDimitry Andric // Bold Blue - AttrColor 400b57cec5SDimitry Andric // Bold Magenta - StmtColor 410b57cec5SDimitry Andric // Cyan - ValueKindColor, ObjectKindColor 420b57cec5SDimitry Andric // Bold Cyan - ValueColor, DeclNameColor 430b57cec5SDimitry Andric 440b57cec5SDimitry Andric // Decl kind names (VarDecl, FunctionDecl, etc) 450b57cec5SDimitry Andric static const TerminalColor DeclKindNameColor = {llvm::raw_ostream::GREEN, true}; 460b57cec5SDimitry Andric // Attr names (CleanupAttr, GuardedByAttr, etc) 470b57cec5SDimitry Andric static const TerminalColor AttrColor = {llvm::raw_ostream::BLUE, true}; 480b57cec5SDimitry Andric // Statement names (DeclStmt, ImplicitCastExpr, etc) 490b57cec5SDimitry Andric static const TerminalColor StmtColor = {llvm::raw_ostream::MAGENTA, true}; 500b57cec5SDimitry Andric // Comment names (FullComment, ParagraphComment, TextComment, etc) 510b57cec5SDimitry Andric static const TerminalColor CommentColor = {llvm::raw_ostream::BLUE, false}; 520b57cec5SDimitry Andric 530b57cec5SDimitry Andric // Type names (int, float, etc, plus user defined types) 540b57cec5SDimitry Andric static const TerminalColor TypeColor = {llvm::raw_ostream::GREEN, false}; 550b57cec5SDimitry Andric 560b57cec5SDimitry Andric // Pointer address 570b57cec5SDimitry Andric static const TerminalColor AddressColor = {llvm::raw_ostream::YELLOW, false}; 580b57cec5SDimitry Andric // Source locations 590b57cec5SDimitry Andric static const TerminalColor LocationColor = {llvm::raw_ostream::YELLOW, false}; 600b57cec5SDimitry Andric 610b57cec5SDimitry Andric // lvalue/xvalue 620b57cec5SDimitry Andric static const TerminalColor ValueKindColor = {llvm::raw_ostream::CYAN, false}; 630b57cec5SDimitry Andric // bitfield/objcproperty/objcsubscript/vectorcomponent 640b57cec5SDimitry Andric static const TerminalColor ObjectKindColor = {llvm::raw_ostream::CYAN, false}; 650b57cec5SDimitry Andric // contains-errors 660b57cec5SDimitry Andric static const TerminalColor ErrorsColor = {llvm::raw_ostream::RED, true}; 670b57cec5SDimitry Andric 680b57cec5SDimitry Andric // Null statements 690b57cec5SDimitry Andric static const TerminalColor NullColor = {llvm::raw_ostream::BLUE, false}; 700b57cec5SDimitry Andric 710b57cec5SDimitry Andric // Undeserialized entities 720b57cec5SDimitry Andric static const TerminalColor UndeserializedColor = {llvm::raw_ostream::GREEN, 730b57cec5SDimitry Andric true}; 740b57cec5SDimitry Andric 750b57cec5SDimitry Andric // CastKind from CastExpr's 760b57cec5SDimitry Andric static const TerminalColor CastColor = {llvm::raw_ostream::RED, false}; 770b57cec5SDimitry Andric 780b57cec5SDimitry Andric // Value of the statement 790b57cec5SDimitry Andric static const TerminalColor ValueColor = {llvm::raw_ostream::CYAN, true}; 800b57cec5SDimitry Andric // Decl names 810b57cec5SDimitry Andric static const TerminalColor DeclNameColor = {llvm::raw_ostream::CYAN, true}; 820b57cec5SDimitry Andric 830b57cec5SDimitry Andric // Indents ( `, -. | ) 840b57cec5SDimitry Andric static const TerminalColor IndentColor = {llvm::raw_ostream::BLUE, false}; 850b57cec5SDimitry Andric 860b57cec5SDimitry Andric class ColorScope { 870b57cec5SDimitry Andric llvm::raw_ostream &OS; 880b57cec5SDimitry Andric const bool ShowColors; 890b57cec5SDimitry Andric 900b57cec5SDimitry Andric public: ColorScope(llvm::raw_ostream & OS,bool ShowColors,TerminalColor Color)910b57cec5SDimitry Andric ColorScope(llvm::raw_ostream &OS, bool ShowColors, TerminalColor Color) 920b57cec5SDimitry Andric : OS(OS), ShowColors(ShowColors) { 930b57cec5SDimitry Andric if (ShowColors) 940b57cec5SDimitry Andric OS.changeColor(Color.Color, Color.Bold); 950b57cec5SDimitry Andric } ~ColorScope()960b57cec5SDimitry Andric ~ColorScope() { 970b57cec5SDimitry Andric if (ShowColors) 980b57cec5SDimitry Andric OS.resetColor(); 990b57cec5SDimitry Andric } 1000b57cec5SDimitry Andric }; 1010b57cec5SDimitry Andric 1020b57cec5SDimitry Andric } // namespace clang 103 104 #endif // LLVM_CLANG_AST_ASTDUMPERUTILS_H 105