[Lldb-commits] [lldb] [lldb] Add a simplified syntax for underlying command options (NFC) (PR #155694)
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Fri Aug 29 09:20:28 PDT 2025
https://github.com/JDevlieghere updated https://github.com/llvm/llvm-project/pull/155694
>From 2a337e37d28a1ce2d02d8605b148213125e0fa01 Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Wed, 27 Aug 2025 13:49:07 -0700
Subject: [PATCH 1/3] [lldb] Add a simplified syntax for underlying command
options (NFC)
This PR updates the tablegen emitter for command options to support a
simplified syntax to underline the mnemonic. Previously, you had to
write `${ansi.underline}<L>${ansi.normal}`, where `<L>` is the mnemonic.
This really hurt the readability of the description. With this PR, you
can write `${<L>}` instead.
---
lldb/source/Commands/Options.td | 31 +++++++++-----------
lldb/utils/TableGen/LLDBOptionDefEmitter.cpp | 27 ++++++++++++++++-
2 files changed, 40 insertions(+), 18 deletions(-)
diff --git a/lldb/source/Commands/Options.td b/lldb/source/Commands/Options.td
index 2aa0b10ac34e5..e61df1342ce9f 100644
--- a/lldb/source/Commands/Options.td
+++ b/lldb/source/Commands/Options.td
@@ -741,35 +741,32 @@ let Command = "process launch" in {
}
let Command = "process attach" in {
- def process_attach_continue
- : Option<"continue", "c">,
- Desc<"Immediately ${ansi.underline}c${ansi.normal}ontinue the process "
- "once attached.">;
- def process_attach_plugin
- : Option<"plugin", "P">,
- Arg<"Plugin">,
- Desc<"Name of the process ${ansi.underline}p${ansi.normal}lugin you "
- "want to use.">;
+ def process_attach_continue : Option<"continue", "c">,
+ Desc<"Immediately ${c}ontinue the process "
+ "once attached.">;
+ def process_attach_plugin : Option<"plugin", "P">,
+ Arg<"Plugin">,
+ Desc<"Name of the process ${p}lugin you "
+ "want to use.">;
def process_attach_pid : Option<"pid", "p">,
Group<1>,
Arg<"Pid">,
- Desc<"The ${ansi.underline}p${ansi.normal}rocess ID "
+ Desc<"The ${p}rocess ID "
"of an existing process to attach to.">;
def process_attach_name : Option<"name", "n">,
Group<2>,
Arg<"ProcessName">,
- Desc<"The ${ansi.underline}n${ansi.normal}ame of "
+ Desc<"The ${n}ame of "
"the process to attach to.">;
def process_attach_include_existing
: Option<"include-existing", "i">,
Group<2>,
- Desc<"${ansi.underline}I${ansi.normal}nclude existing processes when "
+ Desc<"${I}nclude existing processes when "
"doing attach -w.">;
- def process_attach_waitfor
- : Option<"waitfor", "w">,
- Group<2>,
- Desc<"${ansi.underline}W${ansi.normal}ait for the process with "
- "<process-name> to launch.">;
+ def process_attach_waitfor : Option<"waitfor", "w">,
+ Group<2>,
+ Desc<"${W}ait for the process with "
+ "<process-name> to launch.">;
}
let Command = "process continue" in {
diff --git a/lldb/utils/TableGen/LLDBOptionDefEmitter.cpp b/lldb/utils/TableGen/LLDBOptionDefEmitter.cpp
index 2507910d8a97a..b39622240693f 100644
--- a/lldb/utils/TableGen/LLDBOptionDefEmitter.cpp
+++ b/lldb/utils/TableGen/LLDBOptionDefEmitter.cpp
@@ -23,6 +23,31 @@ using namespace llvm;
using namespace lldb_private;
namespace {
+/// Parses curly braces and replaces them with ANSI underline formatting.
+inline std::string underline(llvm::StringRef Str) {
+ llvm::StringRef OpeningHead, OpeningTail, ClosingHead, ClosingTail;
+ std::string Result;
+ llvm::raw_string_ostream Stream(Result);
+ while (!Str.empty()) {
+ // Find the opening brace.
+ std::tie(OpeningHead, OpeningTail) = Str.split("${");
+ Stream << OpeningHead;
+
+ // No opening brace: we're done.
+ if (OpeningHead == Str && OpeningTail.empty())
+ break;
+
+ // Find the closing brace.
+ std::tie(ClosingHead, ClosingTail) = OpeningTail.split('}');
+ assert(!ClosingTail.empty() &&
+ "unmatched curly braces in command option description");
+
+ Stream << "${ansi.underline}" << ClosingHead << "${ansi.normal}";
+ Str = ClosingTail;
+ }
+ return Result;
+}
+
struct CommandOption {
std::vector<std::string> GroupsArg;
bool Required = false;
@@ -68,7 +93,7 @@ struct CommandOption {
Completions = Option->getValueAsListOfStrings("Completions");
if (auto D = Option->getValue("Description"))
- Description = D->getValue()->getAsUnquotedString();
+ Description = underline(D->getValue()->getAsUnquotedString());
}
};
} // namespace
>From 6dd12a717070ff9b4431cd489837bd1534736840 Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Thu, 28 Aug 2025 09:30:56 -0700
Subject: [PATCH 2/3] Make second condition an assert
---
lldb/utils/TableGen/LLDBOptionDefEmitter.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/lldb/utils/TableGen/LLDBOptionDefEmitter.cpp b/lldb/utils/TableGen/LLDBOptionDefEmitter.cpp
index b39622240693f..b536f5ee1b662 100644
--- a/lldb/utils/TableGen/LLDBOptionDefEmitter.cpp
+++ b/lldb/utils/TableGen/LLDBOptionDefEmitter.cpp
@@ -34,9 +34,11 @@ inline std::string underline(llvm::StringRef Str) {
Stream << OpeningHead;
// No opening brace: we're done.
- if (OpeningHead == Str && OpeningTail.empty())
+ if (OpeningHead == Str)
break;
+ assert(!OpeningTail.empty());
+
// Find the closing brace.
std::tie(ClosingHead, ClosingTail) = OpeningTail.split('}');
assert(!ClosingTail.empty() &&
>From d737e1eccde7da2ad48aa2fbc5eca2c239476900 Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Fri, 29 Aug 2025 09:20:19 -0700
Subject: [PATCH 3/3] Apply Michael's suggestion.
Co-authored-by: Michael Buch <michaelbuch12 at gmail.com>
---
lldb/utils/TableGen/LLDBOptionDefEmitter.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lldb/utils/TableGen/LLDBOptionDefEmitter.cpp b/lldb/utils/TableGen/LLDBOptionDefEmitter.cpp
index b536f5ee1b662..e6d5b7bb52a20 100644
--- a/lldb/utils/TableGen/LLDBOptionDefEmitter.cpp
+++ b/lldb/utils/TableGen/LLDBOptionDefEmitter.cpp
@@ -24,7 +24,7 @@ using namespace lldb_private;
namespace {
/// Parses curly braces and replaces them with ANSI underline formatting.
-inline std::string underline(llvm::StringRef Str) {
+std::string underline(llvm::StringRef Str) {
llvm::StringRef OpeningHead, OpeningTail, ClosingHead, ClosingTail;
std::string Result;
llvm::raw_string_ostream Stream(Result);
More information about the lldb-commits
mailing list