Skip to content

Commit 5768bd1

Browse files
authored
Merge pull request #12552 from nkcsgexi/color-syntax-kind
2 parents b245061 + e4e486e commit 5768bd1

File tree

3 files changed

+24
-6
lines changed

3 files changed

+24
-6
lines changed

include/swift/Syntax/RawSyntax.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ enum class SourcePresence {
186186

187187
/// The print option to specify when printing a raw syntax node.
188188
struct SyntaxPrintOptions {
189+
bool Visual = false;
189190
bool PrintSyntaxKind = false;
190191
};
191192

lib/Syntax/RawSyntax.cpp

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13+
#include "swift/Basic/ColorUtils.h"
1314
#include "swift/Syntax/RawSyntax.h"
1415
#include "swift/Syntax/TokenSyntax.h"
1516
#include "llvm/Support/Casting.h"
@@ -33,14 +34,26 @@ static bool isTrivialSyntaxKind(SyntaxKind Kind) {
3334
return false;
3435
}
3536
}
37+
38+
static void printSyntaxKind(SyntaxKind Kind, llvm::raw_ostream &OS,
39+
SyntaxPrintOptions Opts, bool Open) {
40+
std::unique_ptr<swift::OSColor> Color;
41+
if (Opts.Visual) {
42+
Color.reset(new swift::OSColor(OS, llvm::raw_ostream::GREEN));
43+
}
44+
OS << "<";
45+
if (!Open)
46+
OS << "/";
47+
dumpSyntaxKind(OS, Kind);
48+
OS << ">";
49+
}
50+
3651
} // end of anonymous namespace
3752
void RawSyntax::print(llvm::raw_ostream &OS, SyntaxPrintOptions Opts) const {
3853
const bool PrintKind = Opts.PrintSyntaxKind && !isToken() &&
3954
!isTrivialSyntaxKind(Kind);
4055
if (PrintKind) {
41-
OS << "<";
42-
dumpSyntaxKind(OS, Kind);
43-
OS << ">";
56+
printSyntaxKind(Kind, OS, Opts, true);
4457
}
4558

4659
if (const auto Tok = dyn_cast<RawTokenSyntax>(this)) {
@@ -51,9 +64,7 @@ void RawSyntax::print(llvm::raw_ostream &OS, SyntaxPrintOptions Opts) const {
5164
LE->print(OS, Opts);
5265
}
5366
if (PrintKind) {
54-
OS << "</";
55-
dumpSyntaxKind(OS, Kind);
56-
OS << ">";
67+
printSyntaxKind(Kind, OS, Opts, false);
5768
}
5869
}
5970

tools/swift-syntax-test/swift-syntax-test.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ PrintNodeKind("print-node-kind",
8484
llvm::cl::desc("To print syntax node kind"),
8585
llvm::cl::cat(Category),
8686
llvm::cl::init(false));
87+
static llvm::cl::opt<bool>
88+
Visual("v",
89+
llvm::cl::desc("Print visually"),
90+
llvm::cl::cat(Category),
91+
llvm::cl::init(false));
8792
} // end namespace options
8893

8994
namespace {
@@ -283,6 +288,7 @@ int dumpParserGen(const char *MainExecutablePath,
283288
SourceFile *SF = getSourceFile(Instance, InputFileName, MainExecutablePath);
284289
SyntaxPrintOptions Opts;
285290
Opts.PrintSyntaxKind = options::PrintNodeKind;
291+
Opts.Visual = options::Visual;
286292
SF->getSyntaxRoot().print(llvm::outs(), Opts);
287293
return 0;
288294
}

0 commit comments

Comments
 (0)