[Lldb-commits] [lldb] [lldb] Add `scripting extension instances` command (PR #226043)
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Fri Sep 25 11:59:19 PDT 2026
================
@@ -374,6 +374,118 @@ class CommandObjectScriptingExtensionList : public CommandObjectParsed {
CommandOptions m_options;
};
+#define LLDB_OPTIONS_scripting_extension_instances
+#include "CommandOptions.inc"
+
+class CommandObjectScriptingExtensionInstances : public CommandObjectParsed {
+public:
+ CommandObjectScriptingExtensionInstances(CommandInterpreter &interpreter)
+ : CommandObjectParsed(
+ interpreter, "scripting extension instances",
+ "List the instantiated scripting extensions, grouped by class, "
+ "along with the script file each class was imported from.",
+ "scripting extension instances [--json] [<extension-name> ...]") {
+ AddSimpleArgumentList(eArgTypeScriptedExtension, eArgRepeatStar);
+ }
+
+ ~CommandObjectScriptingExtensionInstances() override = default;
+
+ Options *GetOptions() override { return &m_options; }
+
+ void
+ HandleArgumentCompletion(CompletionRequest &request,
+ OptionElementVector &opt_element_vector) override {
+ lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+ GetCommandInterpreter(), lldb::eScriptedExtensionCompletion, request,
+ nullptr);
+ }
+
+ class CommandOptions : public Options {
+ public:
+ CommandOptions() = default;
+ ~CommandOptions() override = default;
+ Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg,
+ ExecutionContext *execution_context) override {
+ const int short_option = m_getopt_table[option_idx].val;
+
+ switch (short_option) {
+ case 'j':
+ m_json_format = true;
+ break;
+ default:
+ llvm_unreachable("Unimplemented option");
+ }
+
+ return {};
+ }
+
+ void OptionParsingStarting(ExecutionContext *execution_context) override {
+ m_json_format = false;
+ }
+
+ llvm::ArrayRef<OptionDefinition> GetDefinitions() override {
+ return llvm::ArrayRef(g_scripting_extension_instances_options);
+ }
+
+ bool m_json_format = false;
+ };
+
+protected:
+ void DoExecute(Args &command, CommandReturnObject &result) override {
+ std::vector<lldb::ScriptedExtension> extensions;
+ for (const Args::ArgEntry &arg : command.entries()) {
+ lldb::ScriptedExtension extension =
+ ScriptInterpreter::StringToExtension(arg.ref());
+ if (extension == eScriptedExtensionInvalid) {
+ result.AppendErrorWithFormat("no scripted extension named '%s'",
+ arg.c_str());
+ return;
+ }
+ extensions.push_back(extension);
+ }
+
+ std::vector<ScriptedInstanceGroup> groups;
+ if (ScriptInterpreter *script_interpreter =
+ GetDebugger().GetScriptInterpreter(/*can_create=*/false))
+ groups =
+ script_interpreter->GetScriptedInstanceRegistry()->GetInstanceGroups(
+ extensions);
+
+ if (m_options.m_json_format) {
+ StructuredData::Array groups_array;
+ for (const ScriptedInstanceGroup &group : groups)
+ groups_array.AddItem(group.ToStructuredData());
+ groups_array.Dump(result.GetOutputStream());
+ result.GetOutputStream().EOL();
+ result.SetStatus(eReturnStatusSuccessFinishResult);
+ return;
+ }
+
+ Stream &s = result.GetOutputStream();
+ const bool use_color = s.AsRawOstream().colors_enabled();
+ constexpr llvm::StringLiteral faint_code = ANSI_ESCAPE1(ANSI_CTRL_FAINT);
+ constexpr llvm::StringLiteral reset_code = ANSI_ESCAPE1(ANSI_CTRL_NORMAL);
----------------
JDevlieghere wrote:
Doesn't belong here.
https://github.com/llvm/llvm-project/pull/226043
More information about the lldb-commits
mailing list