Author: Tobias Ribizel Date: 2022-06-16T12:24:16+02:00 New Revision: e984e1cd6137bb235ca8081b7b35e219c001f86d
URL: https://github.com/llvm/llvm-project/commit/e984e1cd6137bb235ca8081b7b35e219c001f86d DIFF: https://github.com/llvm/llvm-project/commit/e984e1cd6137bb235ca8081b7b35e219c001f86d.diff LOG: [clangd] Don't add inlay hints on std::move/forward This removes parameter inlay hints from a few builtin functions like std::move/std::forward Reviewed By: nridge Differential Revision: https://reviews.llvm.org/D127859 Added: Modified: clang-tools-extra/clangd/InlayHints.cpp clang-tools-extra/clangd/unittests/InlayHintTests.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/InlayHints.cpp b/clang-tools-extra/clangd/InlayHints.cpp index 77dc727bba099..3afadb517cfc2 100644 --- a/clang-tools-extra/clangd/InlayHints.cpp +++ b/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 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> { 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 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> { 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; diff --git a/clang-tools-extra/clangd/unittests/InlayHintTests.cpp b/clang-tools-extra/clangd/unittests/InlayHintTests.cpp index 8807cae64ce05..5644ae0d7cc1f 100644 --- a/clang-tools-extra/clangd/unittests/InlayHintTests.cpp +++ b/clang-tools-extra/clangd/unittests/InlayHintTests.cpp @@ -555,6 +555,17 @@ TEST(ParameterHints, SetterFunctions) { 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); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits