[clang-tools-extra] b9f4c78 - [clangd] Respect ArgumentLists setting for lambdas (#181009)

via cfe-commits cfe-commits at lists.llvm.org
Thu Feb 12 23:31:57 PST 2026


Author: Hugo Rambure
Date: 2026-02-13T02:31:52-05:00
New Revision: b9f4c7887380ea52c0ce101548db584d329fdd70

URL: https://github.com/llvm/llvm-project/commit/b9f4c7887380ea52c0ce101548db584d329fdd70
DIFF: https://github.com/llvm/llvm-project/commit/b9f4c7887380ea52c0ce101548db584d329fdd70.diff

LOG: [clangd] Respect ArgumentLists setting for lambdas (#181009)

Fixes https://github.com/clangd/clangd/issues/1861

Added: 
    

Modified: 
    clang-tools-extra/clangd/CodeComplete.cpp
    clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp

Removed: 
    


################################################################################
diff  --git a/clang-tools-extra/clangd/CodeComplete.cpp b/clang-tools-extra/clangd/CodeComplete.cpp
index f43b5e71a1dfa..7c390f9c8219d 100644
--- a/clang-tools-extra/clangd/CodeComplete.cpp
+++ b/clang-tools-extra/clangd/CodeComplete.cpp
@@ -590,10 +590,12 @@ struct CodeCompletionBuilder {
     if (Snippet->empty())
       return "";
 
-    bool MayHaveArgList = Completion.Kind == CompletionItemKind::Function ||
-                          Completion.Kind == CompletionItemKind::Method ||
-                          Completion.Kind == CompletionItemKind::Constructor ||
-                          Completion.Kind == CompletionItemKind::Text /*Macro*/;
+    bool MayHaveArgList =
+        Completion.Kind == CompletionItemKind::Function ||
+        Completion.Kind == CompletionItemKind::Method ||
+        Completion.Kind == CompletionItemKind::Constructor ||
+        Completion.Kind == CompletionItemKind::Text /*Macro*/ ||
+        Completion.Kind == CompletionItemKind::Variable /*Lambda*/;
     // If likely arg list already exists, don't add new parens & placeholders.
     //   Snippet: function(int x, int y)
     //   func^(1,2) -> function(1, 2)
@@ -628,7 +630,7 @@ struct CodeCompletionBuilder {
       return *Snippet;
 
     // Replace argument snippets with a simplified pattern.
-    if (MayHaveArgList) {
+    if (MayHaveArgList && llvm::StringRef(*Snippet).contains("(")) {
       // Functions snippets can be of 2 types:
       // - containing only function arguments, e.g.
       //   foo(${1:int p1}, ${2:int p2});

diff  --git a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
index 267910b571279..31f2d8bd68703 100644
--- a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
+++ b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
@@ -2821,6 +2821,18 @@ TEST(CompletionTest, ArgumentListsPolicy) {
     EXPECT_THAT(Results.Completions, UnorderedElementsAre(AllOf(
                                          named("FOO"), snippetSuffix("($0)"))));
   }
+  {
+    auto Results = completions(
+        R"cpp(
+      void function() {
+        auto Lambda = [](int a, const double &b) {return 1.f;};
+        Lam^
+      })cpp",
+        {}, Opts);
+    EXPECT_THAT(
+        Results.Completions,
+        UnorderedElementsAre(AllOf(named("Lambda"), snippetSuffix("($0)"))));
+  }
   {
     Opts.ArgumentLists = Config::ArgumentListsPolicy::None;
     auto Results = completions(


        


More information about the cfe-commits mailing list