[clang-tools-extra] [clangd] Handle variables templates consistently with class templates in code completion (PR #85740)

Nathan Ridge via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 18 23:29:12 PDT 2024


https://github.com/HighCommander4 created https://github.com/llvm/llvm-project/pull/85740

The option --function-arg-placeholders=0 results in placeholders being omitted for class template argument lists. This patch extends the same treatment to variable template argument lists.

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

>From 4a4f88571ee2cf4771194f09d3269c885ec069eb Mon Sep 17 00:00:00 2001
From: Nathan Ridge <zeratul976 at hotmail.com>
Date: Sun, 17 Mar 2024 18:17:48 -0400
Subject: [PATCH] [clangd] Handle variables templates consistently with class
 templates in code completion

The option --function-arg-placeholders=0 results in placeholders
being omitted for class template argument lists. This patch extends
the same treatment to variable template argument lists.

Fixes https://github.com/clangd/clangd/issues/1976
---
 clang-tools-extra/clangd/CodeComplete.cpp                | 3 ++-
 clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp | 5 ++++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/clang-tools-extra/clangd/CodeComplete.cpp b/clang-tools-extra/clangd/CodeComplete.cpp
index 0e5f08cec440ce..72544b3c70aac5 100644
--- a/clang-tools-extra/clangd/CodeComplete.cpp
+++ b/clang-tools-extra/clangd/CodeComplete.cpp
@@ -619,7 +619,8 @@ struct CodeCompletionBuilder {
     }
     // 'CompletionItemKind::Interface' matches template type aliases.
     if (Completion.Kind == CompletionItemKind::Interface ||
-        Completion.Kind == CompletionItemKind::Class) {
+        Completion.Kind == CompletionItemKind::Class ||
+        Completion.Kind == CompletionItemKind::Variable) {
       if (Snippet->front() != '<')
         return *Snippet; // Not an arg snippet?
 
diff --git a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
index 6d387fec9b3851..49e91843aeec81 100644
--- a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
+++ b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp
@@ -2631,12 +2631,15 @@ TEST(CompletionTest, CompletionFunctionArgsDisabled) {
       class foo_class{};
       template <class T>
       using foo_alias = T**;
+      template <class T>
+      T foo_var = T{};
       void f() { foo_^ })cpp",
         {}, Opts);
     EXPECT_THAT(
         Results.Completions,
         UnorderedElementsAre(AllOf(named("foo_class"), snippetSuffix("<$0>")),
-                             AllOf(named("foo_alias"), snippetSuffix("<$0>"))));
+                             AllOf(named("foo_alias"), snippetSuffix("<$0>")),
+                             AllOf(named("foo_var"), snippetSuffix("<$0>"))));
   }
   {
     auto Results = completions(



More information about the cfe-commits mailing list