diff options
-rw-r--r-- | clang-tools-extra/clangd/Selection.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/clang-tools-extra/clangd/Selection.cpp b/clang-tools-extra/clangd/Selection.cpp index 2eef06031e1..e0fb4423737 100644 --- a/clang-tools-extra/clangd/Selection.cpp +++ b/clang-tools-extra/clangd/Selection.cpp @@ -246,7 +246,17 @@ void SelectionTree::print(llvm::raw_ostream &OS, const SelectionTree::Node &N, : '.'); else OS.indent(Indent); - OS << N.ASTNode.getNodeKind().asStringRef() << " "; + if (const TypeLoc *TL = N.ASTNode.get<TypeLoc>()) { + // TypeLoc is a hierarchy, but has only a single ASTNodeKind. + // Synthesize the name from the Type subclass (except for QualifiedTypeLoc). + if (TL->getTypeLocClass() == TypeLoc::Qualified) + OS << "QualifiedTypeLoc"; + else + OS << TL->getType()->getTypeClassName() << "TypeLoc"; + } else { + OS << N.ASTNode.getNodeKind().asStringRef(); + } + OS << " "; N.ASTNode.print(OS, PrintPolicy); OS << "\n"; for (const Node *Child : N.Children) @@ -280,6 +290,7 @@ SelectionTree::SelectionTree(ASTContext &AST, unsigned Begin, unsigned End) if (Begin == End) std::tie(Begin, End) = pointBounds(Begin, FID, AST); PrintPolicy.TerseOutput = true; + PrintPolicy.IncludeNewlines = false; Nodes = SelectionVisitor::collect(AST, Begin, End, FID); Root = Nodes.empty() ? nullptr : &Nodes.front(); |