diff --git a/clang-tools-extra/clangd/Config.h b/clang-tools-extra/clangd/Config.h --- a/clang-tools-extra/clangd/Config.h +++ b/clang-tools-extra/clangd/Config.h @@ -147,6 +147,8 @@ bool Parameters = true; bool DeducedTypes = true; bool Designators = true; + // Limit the length of type names in inlay hints. + size_t TypeNameLimit = 32; } InlayHints; }; diff --git a/clang-tools-extra/clangd/ConfigCompile.cpp b/clang-tools-extra/clangd/ConfigCompile.cpp --- a/clang-tools-extra/clangd/ConfigCompile.cpp +++ b/clang-tools-extra/clangd/ConfigCompile.cpp @@ -611,6 +611,11 @@ Out.Apply.push_back([Value(**F.Designators)](const Params &, Config &C) { C.InlayHints.Designators = Value; }); + if (F.TypeNameLimit) + Out.Apply.push_back( + [Value(**F.TypeNameLimit)](const Params &, Config &C) { + C.InlayHints.TypeNameLimit = stoul(Value); + }); } constexpr static llvm::SourceMgr::DiagKind Error = llvm::SourceMgr::DK_Error; diff --git a/clang-tools-extra/clangd/ConfigFragment.h b/clang-tools-extra/clangd/ConfigFragment.h --- a/clang-tools-extra/clangd/ConfigFragment.h +++ b/clang-tools-extra/clangd/ConfigFragment.h @@ -322,6 +322,8 @@ std::optional> DeducedTypes; /// Show designators in aggregate initialization. std::optional> Designators; + /// Limit the length of type name hints. + std::optional> TypeNameLimit; }; InlayHintsBlock InlayHints; }; diff --git a/clang-tools-extra/clangd/ConfigYAML.cpp b/clang-tools-extra/clangd/ConfigYAML.cpp --- a/clang-tools-extra/clangd/ConfigYAML.cpp +++ b/clang-tools-extra/clangd/ConfigYAML.cpp @@ -254,6 +254,10 @@ if (auto Value = boolValue(N, "Designators")) F.Designators = *Value; }); + Dict.handle("TypeNameLimit", [&](Node &N) { + if (auto Value = scalarValue(N, "TypeNameLimit")) + F.TypeNameLimit = *Value; + }); Dict.parse(N); } diff --git a/clang-tools-extra/clangd/InlayHints.cpp b/clang-tools-extra/clangd/InlayHints.cpp --- a/clang-tools-extra/clangd/InlayHints.cpp +++ b/clang-tools-extra/clangd/InlayHints.cpp @@ -688,7 +688,7 @@ return; std::string TypeName = T.getAsString(Policy); - if (TypeName.length() < TypeNameLimit) + if (TypeName.length() < Cfg.InlayHints.TypeNameLimit) addInlayHint(R, HintSide::Right, InlayHintKind::Type, Prefix, TypeName, /*Suffix=*/""); } @@ -714,8 +714,6 @@ // the policies are initialized for more details.) PrintingPolicy TypeHintPolicy; PrintingPolicy StructuredBindingPolicy; - - static const size_t TypeNameLimit = 32; }; } // namespace