[clang-tools-extra] [clangd] Let DefineOutline tweak handle member function templates (PR #112345)
Nathan Ridge via cfe-commits
cfe-commits at lists.llvm.org
Sun Nov 17 20:09:52 PST 2024
================
@@ -130,23 +129,40 @@ getFunctionSourceAfterReplacements(const FunctionDecl *FD,
return QualifiedFunc.takeError();
std::string TemplatePrefix;
+ auto AddToTemplatePrefixIfApplicable = [&](const Decl *D, bool append) {
+ const TemplateParameterList *Params = D->getDescribedTemplateParams();
+ if (!Params)
+ return;
+ for (Decl *P : *Params) {
+ if (auto *TTP = dyn_cast<TemplateTypeParmDecl>(P))
+ TTP->removeDefaultArgument();
+ else if (auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(P))
+ NTTP->removeDefaultArgument();
+ else if (auto *TTPD = dyn_cast<TemplateTemplateParmDecl>(P))
+ TTPD->removeDefaultArgument();
+ }
+ std::string S;
+ llvm::raw_string_ostream Stream(S);
+ Params->print(Stream, FD->getASTContext());
+ if (!S.empty())
+ *S.rbegin() = '\n'; // Replace space with newline
+ if (append)
+ TemplatePrefix.append(S);
+ else
+ TemplatePrefix.insert(0, S);
+ };
if (auto *MD = llvm::dyn_cast<CXXMethodDecl>(FD)) {
for (const CXXRecordDecl *Parent = MD->getParent(); Parent;
Parent =
llvm::dyn_cast_or_null<const CXXRecordDecl>(Parent->getParent())) {
- if (const TemplateParameterList *Params =
- Parent->getDescribedTemplateParams()) {
- std::string S;
- llvm::raw_string_ostream Stream(S);
- Params->print(Stream, FD->getASTContext());
- if (!S.empty())
- *S.rbegin() = '\n'; // Replace space with newline
- TemplatePrefix.insert(0, S);
- }
+ AddToTemplatePrefixIfApplicable(Parent, false);
}
}
+ AddToTemplatePrefixIfApplicable(FD, true);
auto Source = QualifiedFunc->substr(FuncBegin, FuncEnd - FuncBegin + 1);
----------------
HighCommander4 wrote:
This is really a comment on the pre-existing code, but could you move this declaration of `Source` further up, to before `TemplatePrefix`?
https://github.com/llvm/llvm-project/pull/112345
More information about the cfe-commits
mailing list