[clang-tools-extra] [clangd] Make EnableFunctionArgSnippets option string-typed (PR #121178)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 26 20:24:37 PST 2024
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/2232
---
Full diff: https://github.com/llvm/llvm-project/pull/121178.diff
1 Files Affected:
- (modified) clang-tools-extra/clangd/tool/ClangdMain.cpp (+21-6)
``````````diff
diff --git a/clang-tools-extra/clangd/tool/ClangdMain.cpp b/clang-tools-extra/clangd/tool/ClangdMain.cpp
index cc061e2d932314..d89b4d81d830d0 100644
--- a/clang-tools-extra/clangd/tool/ClangdMain.cpp
+++ b/clang-tools-extra/clangd/tool/ClangdMain.cpp
@@ -242,13 +242,13 @@ opt<std::string> FallbackStyle{
init(clang::format::DefaultFallbackStyle),
};
-opt<int> EnableFunctionArgSnippets{
+opt<std::string> EnableFunctionArgSnippets{
"function-arg-placeholders",
cat(Features),
desc("When disabled (0), completions contain only parentheses for "
"function calls. When enabled (1), completions also contain "
"placeholders for method parameters"),
- init(-1),
+ init("-1"),
};
opt<CodeCompleteOptions::IncludeInsertion> HeaderInsertion{
@@ -635,6 +635,22 @@ loadExternalIndex(const Config::ExternalIndexSpec &External,
llvm_unreachable("Invalid ExternalIndexKind.");
}
+std::optional<bool> shouldEnableFunctionArgSnippets() {
+ std::string Val = EnableFunctionArgSnippets;
+ // Accept the same values that a bool option parser would, but also accept
+ // -1 to indicate "unspecified", in which case the ArgumentListsPolicy
+ // config option will be respected.
+ if (Val == "1" || Val == "true" || Val == "True" || Val == "TRUE")
+ return true;
+ if (Val == "0" || Val == "false" || Val == "False" || Val == "FALSE")
+ return false;
+ if (Val != "-1")
+ elog("Value specified by --function-arg-placeholders is invalid. Provide a "
+ "boolean value or leave unspecified to use ArgumentListsPolicy from "
+ "config instead.");
+ return std::nullopt;
+}
+
class FlagsConfigProvider : public config::Provider {
private:
config::CompiledFragment Frag;
@@ -695,10 +711,9 @@ class FlagsConfigProvider : public config::Provider {
BGPolicy = Config::BackgroundPolicy::Skip;
}
- if (EnableFunctionArgSnippets >= 0) {
- ArgumentLists = EnableFunctionArgSnippets
- ? Config::ArgumentListsPolicy::FullPlaceholders
- : Config::ArgumentListsPolicy::Delimiters;
+ if (std::optional<bool> Enable = shouldEnableFunctionArgSnippets()) {
+ ArgumentLists = *Enable ? Config::ArgumentListsPolicy::FullPlaceholders
+ : Config::ArgumentListsPolicy::Delimiters;
}
Frag = [=](const config::Params &, Config &C) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/121178
More information about the cfe-commits
mailing list