[clangd] Improve SelectionTree string representation

llvm-svn: 364180
This commit is contained in:
Sam McCall 2019-06-24 13:01:28 +00:00
parent 69144a925e
commit ca89eb5f9c
1 changed files with 12 additions and 1 deletions

View File

@ -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();