kadircet created this revision. kadircet added a reviewer: ilya-biryukov. Herald added subscribers: cfe-commits, usaxena95, arphaman, jkorous, MaskRay. Herald added a project: clang.
We were traversing AST twice to get the Decl in case of sugared types(auto, decltype). They seem to be same in practice, so this patch gets rid of the second traversal and makes use of TagDecl inside QualType instead. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D71597 Files: clang-tools-extra/clangd/Hover.cpp Index: clang-tools-extra/clangd/Hover.cpp =================================================================== --- clang-tools-extra/clangd/Hover.cpp +++ clang-tools-extra/clangd/Hover.cpp @@ -342,15 +342,15 @@ } /// Generate a \p Hover object given the type \p T. -HoverInfo getHoverContents(QualType T, const Decl *D, ASTContext &ASTCtx, - const SymbolIndex *Index) { +HoverInfo getHoverContents(QualType T, ASTContext &ASTCtx, + const SymbolIndex *Index) { HoverInfo HI; llvm::raw_string_ostream OS(HI.Name); PrintingPolicy Policy = printingPolicyForDecls(ASTCtx.getPrintingPolicy()); T.print(OS, Policy); OS.flush(); - if (D) { + if (const auto *D = T->getAsTagDecl()) { HI.Kind = index::getSymbolInfo(D).Kind; enhanceFromIndex(HI, D, Index); } @@ -396,12 +396,7 @@ getBeginningOfIdentifier(Pos, SM, AST.getLangOpts())); if (auto Deduced = getDeducedType(AST.getASTContext(), SourceLocationBeg)) { - // Find the corresponding decl to populate kind and fetch documentation. - DeclRelationSet Rel = DeclRelation::TemplatePattern | DeclRelation::Alias; - auto Decls = - targetDecl(ast_type_traits::DynTypedNode::create(*Deduced), Rel); - HI = getHoverContents(*Deduced, Decls.empty() ? nullptr : Decls.front(), - AST.getASTContext(), Index); + HI = getHoverContents(*Deduced, AST.getASTContext(), Index); } else if (auto M = locateMacroAt(SourceLocationBeg, AST.getPreprocessor())) { HI = getHoverContents(*M, AST); } else {
Index: clang-tools-extra/clangd/Hover.cpp =================================================================== --- clang-tools-extra/clangd/Hover.cpp +++ clang-tools-extra/clangd/Hover.cpp @@ -342,15 +342,15 @@ } /// Generate a \p Hover object given the type \p T. -HoverInfo getHoverContents(QualType T, const Decl *D, ASTContext &ASTCtx, - const SymbolIndex *Index) { +HoverInfo getHoverContents(QualType T, ASTContext &ASTCtx, + const SymbolIndex *Index) { HoverInfo HI; llvm::raw_string_ostream OS(HI.Name); PrintingPolicy Policy = printingPolicyForDecls(ASTCtx.getPrintingPolicy()); T.print(OS, Policy); OS.flush(); - if (D) { + if (const auto *D = T->getAsTagDecl()) { HI.Kind = index::getSymbolInfo(D).Kind; enhanceFromIndex(HI, D, Index); } @@ -396,12 +396,7 @@ getBeginningOfIdentifier(Pos, SM, AST.getLangOpts())); if (auto Deduced = getDeducedType(AST.getASTContext(), SourceLocationBeg)) { - // Find the corresponding decl to populate kind and fetch documentation. - DeclRelationSet Rel = DeclRelation::TemplatePattern | DeclRelation::Alias; - auto Decls = - targetDecl(ast_type_traits::DynTypedNode::create(*Deduced), Rel); - HI = getHoverContents(*Deduced, Decls.empty() ? nullptr : Decls.front(), - AST.getASTContext(), Index); + HI = getHoverContents(*Deduced, AST.getASTContext(), Index); } else if (auto M = locateMacroAt(SourceLocationBeg, AST.getPreprocessor())) { HI = getHoverContents(*M, AST); } else {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits