This revision was automatically updated to reflect the committed changes.
Closed by commit rG2ae1aa9da788: [Clangd] Make the type hint length limit
configurable (authored by zhangyi1357, committed by hokein).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D147395/new/
https://reviews.llvm.org/D147395
Files:
clang-tools-extra/clangd/Config.h
clang-tools-extra/clangd/ConfigCompile.cpp
clang-tools-extra/clangd/ConfigFragment.h
clang-tools-extra/clangd/ConfigYAML.cpp
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
@@ -1324,6 +1324,21 @@
// Omit type hint past a certain length (currently 32)
auto var = foo();
)cpp");
+
+ Config Cfg;
+ Cfg.InlayHints.TypeNameLimit = 0;
+ WithContextValue WithCfg(Config::Key, std::move(Cfg));
+
+ assertTypeHints(
+ R"cpp(
+ template <typename, typename, typename>
+ struct A {};
+ struct MultipleWords {};
+ A<MultipleWords, MultipleWords, MultipleWords> foo();
+ // Should have type hint with TypeNameLimit = 0
+ auto $var[[var]] = foo();
+ )cpp",
+ ExpectedHint{": A<MultipleWords, MultipleWords, MultipleWords>", "var"});
}
TEST(TypeHints, DefaultTemplateArgs) {
Index: clang-tools-extra/clangd/InlayHints.cpp
===================================================================
--- clang-tools-extra/clangd/InlayHints.cpp
+++ clang-tools-extra/clangd/InlayHints.cpp
@@ -688,7 +688,8 @@
return;
std::string TypeName = T.getAsString(Policy);
- if (TypeName.length() < TypeNameLimit)
+ if (Cfg.InlayHints.TypeNameLimit == 0 ||
+ TypeName.length() < Cfg.InlayHints.TypeNameLimit)
addInlayHint(R, HintSide::Right, InlayHintKind::Type, Prefix, TypeName,
/*Suffix=*/"");
}
@@ -714,8 +715,6 @@
// the policies are initialized for more details.)
PrintingPolicy TypeHintPolicy;
PrintingPolicy StructuredBindingPolicy;
-
- static const size_t TypeNameLimit = 32;
};
} // namespace
Index: clang-tools-extra/clangd/ConfigYAML.cpp
===================================================================
--- clang-tools-extra/clangd/ConfigYAML.cpp
+++ 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 = uint32Value(N, "TypeNameLimit"))
+ F.TypeNameLimit = *Value;
+ });
Dict.parse(N);
}
@@ -375,6 +379,17 @@
return std::nullopt;
}
+ std::optional<Located<uint32_t>> uint32Value(Node &N, llvm::StringRef Desc) {
+ if (auto Scalar = scalarValue(N, Desc)) {
+ unsigned long long Num;
+ if (!llvm::getAsUnsignedInteger(**Scalar, 0, Num)) {
+ return Located<uint32_t>(Num, Scalar->Range);
+ }
+ }
+ warning(Desc + " invalid number", N);
+ return std::nullopt;
+ }
+
// Try to parse a list of single scalar values, or just a single value.
std::optional<std::vector<Located<std::string>>> scalarValues(Node &N) {
std::vector<Located<std::string>> Result;
Index: clang-tools-extra/clangd/ConfigFragment.h
===================================================================
--- clang-tools-extra/clangd/ConfigFragment.h
+++ clang-tools-extra/clangd/ConfigFragment.h
@@ -322,6 +322,8 @@
std::optional<Located<bool>> DeducedTypes;
/// Show designators in aggregate initialization.
std::optional<Located<bool>> Designators;
+ /// Limit the length of type name hints. (0 means no limit)
+ std::optional<Located<uint32_t>> TypeNameLimit;
};
InlayHintsBlock InlayHints;
};
Index: clang-tools-extra/clangd/ConfigCompile.cpp
===================================================================
--- clang-tools-extra/clangd/ConfigCompile.cpp
+++ 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 = Value;
+ });
}
constexpr static llvm::SourceMgr::DiagKind Error = llvm::SourceMgr::DK_Error;
Index: clang-tools-extra/clangd/Config.h
===================================================================
--- clang-tools-extra/clangd/Config.h
+++ 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. (0 means no limit)
+ uint32_t TypeNameLimit = 32;
} InlayHints;
};
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits