[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