[clang-tools-extra] [clangd] Report retired flags after parsing (PR #226360)
Fangrui Song via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 24 22:31:22 PDT 2026
https://github.com/MaskRay created https://github.com/llvm/llvm-project/pull/226360
cl::callback will be removed to enable migration to TableGen
https://discourse.llvm.org/t/rfc-declare-library-command-line-options-in-tablegen-one-struct-per-library/91877/3
LLM-aided
>From f4a0d9d87ab5621a842879457bef912a5d64c4e2 Mon Sep 17 00:00:00 2001
From: Fangrui Song <i at maskray.me>
Date: Thu, 24 Sep 2026 22:03:42 -0700
Subject: [PATCH] [clangd] Report retired flags after parsing
cl::callback will be removed to enable migration to TableGen
https://discourse.llvm.org/t/rfc-declare-library-command-line-options-in-tablegen-one-struct-per-library/91877/3
LLM-aided
---
clang-tools-extra/clangd/tool/ClangdMain.cpp | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/clang-tools-extra/clangd/tool/ClangdMain.cpp b/clang-tools-extra/clangd/tool/ClangdMain.cpp
index 13fe4d3911731d..2446162fc4ce13 100644
--- a/clang-tools-extra/clangd/tool/ClangdMain.cpp
+++ b/clang-tools-extra/clangd/tool/ClangdMain.cpp
@@ -91,16 +91,16 @@ OptionCategory Retired("clangd flags no longer in use");
const OptionCategory *ClangdCategories[] = {&Features, &Protocol,
&CompileCommands, &Misc, &Retired};
+std::vector<const llvm::cl::Option *> RetiredOptions;
+
template <typename T> class RetiredFlag {
opt<T> Option;
public:
RetiredFlag(llvm::StringRef Name)
- : Option(Name, cat(Retired), desc("Obsolete flag, ignored"), Hidden,
- llvm::cl::callback([Name](const T &) {
- llvm::errs()
- << "The flag `-" << Name << "` is obsolete and ignored.\n";
- })) {}
+ : Option(Name, cat(Retired), desc("Obsolete flag, ignored"), Hidden) {
+ RetiredOptions.push_back(&Option);
+ }
};
enum CompileArgsFrom { LSPCompileArgs, FilesystemCompileArgs };
@@ -798,6 +798,10 @@ clangd accepts flags on the commandline, and in the CLANGD_FLAGS environment var
llvm::cl::HideUnrelatedOptions(ClangdCategories);
llvm::cl::ParseCommandLineOptions(argc, argv, Overview, /*Errs=*/nullptr,
/*VFS=*/nullptr, FlagsEnvVar);
+ for (const llvm::cl::Option *O : RetiredOptions)
+ if (O->getNumOccurrences())
+ llvm::errs() << "The flag `-" << O->ArgStr
+ << "` is obsolete and ignored.\n";
if (Test) {
if (!Sync.getNumOccurrences())
Sync = true;
More information about the cfe-commits
mailing list