=?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

Reply via email to