llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang-tools-extra Author: Nathan Ridge (HighCommander4) <details> <summary>Changes</summary> Fixes https://github.com/clangd/clangd/issues/2248 --- Full diff: https://github.com/llvm/llvm-project/pull/119162.diff 2 Files Affected: - (modified) clang-tools-extra/clangd/InlayHints.cpp (+16-1) - (modified) clang-tools-extra/clangd/unittests/InlayHintTests.cpp (+9) ``````````diff diff --git a/clang-tools-extra/clangd/InlayHints.cpp b/clang-tools-extra/clangd/InlayHints.cpp index fefffeb4efc1a2..0ad0ffd86bd4c8 100644 --- a/clang-tools-extra/clangd/InlayHints.cpp +++ b/clang-tools-extra/clangd/InlayHints.cpp @@ -867,13 +867,28 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> { } } + static bool argumentMatchesParamName(StringRef ArgName, StringRef ParamName) { + // Exact match. + if (ParamName == ArgName) + return true; + + // Parameter name uses "a" prefix (e.g. "aParam"). + if (ParamName.size() > 1 && ParamName[0] == 'a' && + std::isupper(ParamName[1])) { + return ArgName.size() > 0 && ArgName[0] == std::tolower(ParamName[1]) && + ArgName.drop_front() == ParamName.drop_front(2); + } + + return false; + } + bool shouldHintName(const Expr *Arg, StringRef ParamName) { if (ParamName.empty()) return false; // If the argument expression is a single name and it matches the // parameter name exactly, omit the name hint. - if (ParamName == getSpelledIdentifier(Arg)) + if (argumentMatchesParamName(getSpelledIdentifier(Arg), ParamName)) return false; // Exclude argument expressions preceded by a /*paramName*/. diff --git a/clang-tools-extra/clangd/unittests/InlayHintTests.cpp b/clang-tools-extra/clangd/unittests/InlayHintTests.cpp index 77d78b8777fe30..3f9795c2330b85 100644 --- a/clang-tools-extra/clangd/unittests/InlayHintTests.cpp +++ b/clang-tools-extra/clangd/unittests/InlayHintTests.cpp @@ -1011,6 +1011,7 @@ TEST(ParameterHints, FunctionPointer) { TEST(ParameterHints, ArgMatchesParam) { assertParameterHints(R"cpp( void foo(int param); + void prefixConvention(int aParam); struct S { static const int param = 42; }; @@ -1018,6 +1019,12 @@ TEST(ParameterHints, ArgMatchesParam) { int param = 42; // Do not show redundant "param: param". foo(param); + // Some codebases have a naming convention of prefixing + // parameter names with "a", e.g. "aParam". (The "a" + // stands for "argument", used as an (imprecise) synonym + // for "parameter".) + // Do not show "aParam: param" either. + prefixConvention(param); // But show it if the argument is qualified. foo($param[[S::param]]); } @@ -1026,6 +1033,8 @@ TEST(ParameterHints, ArgMatchesParam) { void bar() { // Do not show "param: param" for member-expr. foo(param); + // Nor "aParam: param" + prefixConvention(param); } }; )cpp", `````````` </details> https://github.com/llvm/llvm-project/pull/119162 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits