llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clangd Author: timon-ul <details> <summary>Changes</summary> Resolves issue https://github.com/clangd/clangd/issues/2651 --- Full diff: https://github.com/llvm/llvm-project/pull/206716.diff 3 Files Affected: - (modified) clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp (+18) - (modified) clang-tools-extra/clangd/unittests/IndexActionTests.cpp (+25) - (modified) clang/lib/Sema/SemaCodeComplete.cpp (+7) ``````````diff diff --git a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp index 5808b2145965f..037983a80300d 100644 --- a/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp +++ b/clang-tools-extra/clangd/unittests/CodeCompleteTests.cpp @@ -698,6 +698,24 @@ TEST(CompletionTest, PrivateMemberDefinition) { snippetSuffix("(int a, int b)")))); } +TEST(CompletionTest, DeclParamName) { + // This is 1/2 regression tests to make sure signatures + // 1) have consistent variable names between header and source file + // 2) find variable names in other declarations + clangd::CodeCompleteOptions Opts; + Opts.EnableSnippets = true; + auto FuncFromSource = completions(R"cpp( + void sun(int); + void sun(int day); + void sun(int); + void position() { + sun^; + } + )cpp", + {}, Opts); + EXPECT_THAT(FuncFromSource.Completions, Contains(signature("(int day)"))); +} + TEST(CompletionTest, DefaultArgsWithValues) { clangd::CodeCompleteOptions Opts; Opts.EnableSnippets = true; diff --git a/clang-tools-extra/clangd/unittests/IndexActionTests.cpp b/clang-tools-extra/clangd/unittests/IndexActionTests.cpp index 025027fdcee5d..5b8029654a73d 100644 --- a/clang-tools-extra/clangd/unittests/IndexActionTests.cpp +++ b/clang-tools-extra/clangd/unittests/IndexActionTests.cpp @@ -11,6 +11,7 @@ #include "URI.h" #include "index/IndexAction.h" #include "index/Serialization.h" +#include "index/Symbol.h" #include "clang/Basic/SourceLocation.h" #include "clang/Basic/SourceManager.h" #include "clang/Tooling/Tooling.h" @@ -38,6 +39,8 @@ MATCHER_P(hasDigest, Digest, "") { return arg.Digest == Digest; } MATCHER_P(hasName, Name, "") { return arg.Name == Name; } +MATCHER_P(hasSignature, Signature, "") { return arg.Signature == Signature; } + MATCHER(hasSameURI, "") { llvm::StringRef URI = ::testing::get<0>(arg); const std::string &Path = ::testing::get<1>(arg); @@ -258,6 +261,28 @@ TEST_F(IndexActionTest, NoWarnings) { EXPECT_THAT(*IndexFile.Symbols, ElementsAre(hasName("foo"), hasName("bar"))); } +TEST_F(IndexActionTest, DeclParamName) { + // This is 2/2 regression tests to make sure signatures + // 1) have consistent variable names between header and source file + // 2) find variable names in other declarations + std::string MainFilePath = testPath("main.cpp"); + std::string MainCode = R"cpp( #include "zenith.hpp" )cpp"; + std::string HeaderPath = testPath("zenith.hpp"); + std::string HeaderCode = R"cpp( + void moon(int, int); + void moon(int month, int day); + void moon(int, int); + )cpp"; + + addFile(MainFilePath, MainCode); + addFile(HeaderPath, HeaderCode); + + IndexFileIn IndexFile = runIndexingAction(MainFilePath); + + EXPECT_THAT(*IndexFile.Symbols, + ElementsAre(hasSignature("(int month, int day)"))); +} + TEST_F(IndexActionTest, SkipFiles) { std::string MainFilePath = testPath("main.cpp"); addFile(MainFilePath, R"cpp( diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index bef5eea9ed442..f724fb44f184e 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -3320,6 +3320,13 @@ static void AddFunctionParameterChunks( for (unsigned P = Start, N = Function->getNumParams(); P != N; ++P) { const ParmVarDecl *Param = Function->getParamDecl(P); + // Select a parameter with identifier if possible for better signature + if (!Param->getIdentifier()) { + for (auto *Redecl : Function->redecls()) { + if (auto *RParam = Redecl->getParamDecl(P); RParam->getIdentifier()) + Param = RParam; + } + } if (Param->hasDefaultArg() && !InOptional && !IsInDeclarationContext && !AsInformativeChunk) { `````````` </details> https://github.com/llvm/llvm-project/pull/206716 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
