From e3e15836af79cbcfe452624caf326b854781abdd Mon Sep 17 00:00:00 2001 From: Sam McCall Date: Tue, 19 May 2020 01:30:23 +0200 Subject: [PATCH] [clangd] Tidy up SelectionTree dumps with newlines --- clang-tools-extra/clangd/Selection.cpp | 23 ++++++++++++++++++++--- clang-tools-extra/clangd/unittests/TweakTests.cpp | 9 +++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/clang-tools-extra/clangd/Selection.cpp b/clang-tools-extra/clangd/Selection.cpp index df7e82ccb2d..1db15ba6699 100644 --- a/clang-tools-extra/clangd/Selection.cpp +++ b/clang-tools-extra/clangd/Selection.cpp @@ -25,6 +25,7 @@ #include "clang/Lex/Lexer.h" #include "clang/Tooling/Syntax/Tokens.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/StringExtras.h" #include "llvm/Support/Casting.h" #include "llvm/Support/raw_ostream.h" #include @@ -708,6 +709,24 @@ private: } // namespace +llvm::SmallString<256> abbreviatedString(DynTypedNode N, + const PrintingPolicy &PP) { + llvm::SmallString<256> Result; + { + llvm::raw_svector_ostream OS(Result); + N.print(OS, PP); + } + auto Pos = Result.find('\n'); + if (Pos != llvm::StringRef::npos) { + bool MoreText = + !llvm::all_of(llvm::StringRef(Result).drop_front(Pos), llvm::isSpace); + Result.resize(Pos); + if (MoreText) + Result.append(" …"); + } + return Result; +} + void SelectionTree::print(llvm::raw_ostream &OS, const SelectionTree::Node &N, int Indent) const { if (N.Selected) @@ -716,9 +735,7 @@ void SelectionTree::print(llvm::raw_ostream &OS, const SelectionTree::Node &N, else OS.indent(Indent); printNodeKind(OS, N.ASTNode); - OS << ' '; - N.ASTNode.print(OS, PrintPolicy); - OS << "\n"; + OS << ' ' << abbreviatedString(N.ASTNode, PrintPolicy) << "\n"; for (const Node *Child : N.Children) print(OS, *Child, Indent + 2); } diff --git a/clang-tools-extra/clangd/unittests/TweakTests.cpp b/clang-tools-extra/clangd/unittests/TweakTests.cpp index 95f086f7738..b0a941dae5d 100644 --- a/clang-tools-extra/clangd/unittests/TweakTests.cpp +++ b/clang-tools-extra/clangd/unittests/TweakTests.cpp @@ -173,6 +173,15 @@ TEST_F(ShowSelectionTreeTest, Test) { *IntegerLiteral 2 )"; EXPECT_EQ(apply("int fcall(int); int x = fca[[ll(2 +]]2);"), Output); + + Output = R"(message: + TranslationUnitDecl + FunctionDecl void x() + CompoundStmt { … + ForStmt for (;;) … + *BreakStmt break; +)"; + EXPECT_EQ(apply("void x() { for (;;) br^eak; }"), Output); } TWEAK_TEST(DumpRecordLayout); -- 2.11.0