This revision was automatically updated to reflect the committed changes. Closed by commit rGe984e1cd6137: [clangd] Don't add inlay hints on std::move/forward (authored by upsj).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D127859/new/ https://reviews.llvm.org/D127859 Files: clang-tools-extra/clangd/InlayHints.cpp clang-tools-extra/clangd/unittests/InlayHintTests.cpp Index: clang-tools-extra/clangd/unittests/InlayHintTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/InlayHintTests.cpp +++ clang-tools-extra/clangd/unittests/InlayHintTests.cpp @@ -555,6 +555,17 @@ ExpectedHint{"timeout_millis: ", "timeout_millis"}); } +TEST(ParameterHints, BuiltinFunctions) { + // This prototype of std::forward is sufficient for clang to recognize it + assertParameterHints(R"cpp( + namespace std { template <typename T> T&& forward(T&); } + void foo() { + int i; + std::forward(i); + } + )cpp"); +} + TEST(ParameterHints, IncludeAtNonGlobalScope) { Annotations FooInc(R"cpp( void bar() { foo(42); } Index: clang-tools-extra/clangd/InlayHints.cpp =================================================================== --- clang-tools-extra/clangd/InlayHints.cpp +++ clang-tools-extra/clangd/InlayHints.cpp @@ -14,6 +14,7 @@ #include "clang/AST/DeclarationName.h" #include "clang/AST/ExprCXX.h" #include "clang/AST/RecursiveASTVisitor.h" +#include "clang/Basic/Builtins.h" #include "clang/Basic/SourceManager.h" #include "llvm/ADT/ScopeExit.h" @@ -400,8 +401,9 @@ NameVec ParameterNames = chooseParameterNames(Callee, ArgCount); // Exclude setters (i.e. functions with one argument whose name begins with - // "set"), as their parameter name is also not likely to be interesting. - if (isSetter(Callee, ParameterNames)) + // "set"), and builtins like std::move/forward/... as their parameter name + // is also not likely to be interesting. + if (isSetter(Callee, ParameterNames) || isSimpleBuiltin(Callee)) return; for (size_t I = 0; I < ArgCount; ++I) { @@ -440,6 +442,21 @@ return WhatItIsSetting.equals_insensitive(ParamNames[0]); } + // Checks if the callee is one of the builtins + // addressof, as_const, forward, move(_if_noexcept) + static bool isSimpleBuiltin(const FunctionDecl *Callee) { + switch (Callee->getBuiltinID()) { + case Builtin::BIaddressof: + case Builtin::BIas_const: + case Builtin::BIforward: + case Builtin::BImove: + case Builtin::BImove_if_noexcept: + return true; + default: + return false; + } + } + bool shouldHintName(const Expr *Arg, StringRef ParamName) { if (ParamName.empty()) return false;
Index: clang-tools-extra/clangd/unittests/InlayHintTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/InlayHintTests.cpp +++ clang-tools-extra/clangd/unittests/InlayHintTests.cpp @@ -555,6 +555,17 @@ ExpectedHint{"timeout_millis: ", "timeout_millis"}); } +TEST(ParameterHints, BuiltinFunctions) { + // This prototype of std::forward is sufficient for clang to recognize it + assertParameterHints(R"cpp( + namespace std { template <typename T> T&& forward(T&); } + void foo() { + int i; + std::forward(i); + } + )cpp"); +} + TEST(ParameterHints, IncludeAtNonGlobalScope) { Annotations FooInc(R"cpp( void bar() { foo(42); } Index: clang-tools-extra/clangd/InlayHints.cpp =================================================================== --- clang-tools-extra/clangd/InlayHints.cpp +++ clang-tools-extra/clangd/InlayHints.cpp @@ -14,6 +14,7 @@ #include "clang/AST/DeclarationName.h" #include "clang/AST/ExprCXX.h" #include "clang/AST/RecursiveASTVisitor.h" +#include "clang/Basic/Builtins.h" #include "clang/Basic/SourceManager.h" #include "llvm/ADT/ScopeExit.h" @@ -400,8 +401,9 @@ NameVec ParameterNames = chooseParameterNames(Callee, ArgCount); // Exclude setters (i.e. functions with one argument whose name begins with - // "set"), as their parameter name is also not likely to be interesting. - if (isSetter(Callee, ParameterNames)) + // "set"), and builtins like std::move/forward/... as their parameter name + // is also not likely to be interesting. + if (isSetter(Callee, ParameterNames) || isSimpleBuiltin(Callee)) return; for (size_t I = 0; I < ArgCount; ++I) { @@ -440,6 +442,21 @@ return WhatItIsSetting.equals_insensitive(ParamNames[0]); } + // Checks if the callee is one of the builtins + // addressof, as_const, forward, move(_if_noexcept) + static bool isSimpleBuiltin(const FunctionDecl *Callee) { + switch (Callee->getBuiltinID()) { + case Builtin::BIaddressof: + case Builtin::BIas_const: + case Builtin::BIforward: + case Builtin::BImove: + case Builtin::BImove_if_noexcept: + return true; + default: + return false; + } + } + bool shouldHintName(const Expr *Arg, StringRef ParamName) { if (ParamName.empty()) return false;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits