=?utf-8?b?5YWo5Y2T?= <[email protected]> Message-ID: In-Reply-To: <llvm.org/llvm/llvm-project/pull/[email protected]>
https://github.com/quanzhuo updated https://github.com/llvm/llvm-project/pull/173606 >From 25166cf972a244e85ccc0904d36e386814edb67b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=A8=E5=8D=93?= <[email protected]> Date: Fri, 26 Dec 2025 15:35:17 +0800 Subject: [PATCH 1/2] [clangd][refactor] Improve function source code qualification logic in DefineOutline --- .../clangd/refactor/tweaks/DefineOutline.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp b/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp index 45e7adeeefcd9..6e00f37ca83de 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp @@ -236,8 +236,13 @@ getFunctionSourceCode(const FunctionDecl *FD, const DeclContext *TargetContext, if (Ref.Qualifier || Ref.Targets.empty() || Ref.NameLoc.isMacroID()) return; // Only qualify return type and function name. - if (Ref.NameLoc != FD->getReturnTypeSourceRange().getBegin() && - Ref.NameLoc != FD->getLocation()) + auto ReturnTypeRange = FD->getReturnTypeSourceRange(); + if (Ref.NameLoc != FD->getLocation() && + (ReturnTypeRange.isInvalid() || + SM.isBeforeInTranslationUnit(Ref.NameLoc, + ReturnTypeRange.getBegin()) || + SM.isBeforeInTranslationUnit(ReturnTypeRange.getEnd(), + Ref.NameLoc))) return; for (const NamedDecl *ND : Ref.Targets) { >From 8eb90760642aa12dba78ab6b112e9a1381170cf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=A8=E5=8D=93?= <[email protected]> Date: Sat, 3 Jan 2026 09:42:06 +0800 Subject: [PATCH 2/2] [clangd][refactor] Enhance return value qualification in DefineOutline and add corresponding tests --- .../clangd/refactor/tweaks/DefineOutline.cpp | 4 ++-- .../clangd/unittests/tweaks/DefineOutlineTests.cpp | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp b/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp index 6e00f37ca83de..b50ce60361490 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp @@ -236,8 +236,8 @@ getFunctionSourceCode(const FunctionDecl *FD, const DeclContext *TargetContext, if (Ref.Qualifier || Ref.Targets.empty() || Ref.NameLoc.isMacroID()) return; // Only qualify return type and function name. - auto ReturnTypeRange = FD->getReturnTypeSourceRange(); - if (Ref.NameLoc != FD->getLocation() && + if (auto ReturnTypeRange = FD->getReturnTypeSourceRange(); + Ref.NameLoc != FD->getLocation() && (ReturnTypeRange.isInvalid() || SM.isBeforeInTranslationUnit(Ref.NameLoc, ReturnTypeRange.getBegin()) || diff --git a/clang-tools-extra/clangd/unittests/tweaks/DefineOutlineTests.cpp b/clang-tools-extra/clangd/unittests/tweaks/DefineOutlineTests.cpp index 7689bf3181a5f..eb51279754895 100644 --- a/clang-tools-extra/clangd/unittests/tweaks/DefineOutlineTests.cpp +++ b/clang-tools-extra/clangd/unittests/tweaks/DefineOutlineTests.cpp @@ -631,6 +631,19 @@ TEST_F(DefineOutlineTest, QualifyReturnValue) { class Foo {}; Foo foo() ;)cpp", "Foo foo() { return {}; }"}, + {R"cpp( + template <typename T> class Expected {}; + class Foo { + class Bar {}; + Expected<Bar> fu^nc() { return {}; } + };)cpp", + R"cpp( + template <typename T> class Expected {}; + class Foo { + class Bar {}; + Expected<Bar> func() ; + };)cpp", + "Expected<Foo::Bar> Foo::func() { return {}; }\n"}, }; llvm::StringMap<std::string> EditedFiles; for (auto &Case : Cases) { _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
