[clang-tools-extra] [clangd] Handle variables templates consistently with class templates in code completion (PR #85740)
https://github.com/hokein approved this pull request. https://github.com/llvm/llvm-project/pull/85740 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clangd] Handle variables templates consistently with class templates in code completion (PR #85740)
llvmbot wrote: @llvm/pr-subscribers-clangd Author: Nathan Ridge (HighCommander4) Changes 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 --- Full diff: https://github.com/llvm/llvm-project/pull/85740.diff 2 Files Affected: - (modified) clang-tools-extra/clangd/CodeComplete.cpp (+2-1) - (modified) clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp (+4-1) ``diff 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 using foo_alias = T**; + template + 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( `` https://github.com/llvm/llvm-project/pull/85740 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang-tools-extra] [clangd] Handle variables templates consistently with class templates in code completion (PR #85740)
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 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 using foo_alias = T**; + template + 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( ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits