================ @@ -127,6 +130,157 @@ class CommandObjectScriptingRun : public CommandObjectRaw { CommandOptions m_options; }; +#pragma mark CommandObjectScriptingTemplateList + +#define LLDB_OPTIONS_scripting_template_list +#include "CommandOptions.inc" + +class CommandObjectScriptingTemplateList : public CommandObjectParsed { +public: + CommandObjectScriptingTemplateList(CommandInterpreter &interpreter) + : CommandObjectParsed( + interpreter, "scripting template list", + "List all the available scripting affordances templates. ", + "scripting template list [--language <scripting-language> --]") {} + + ~CommandObjectScriptingTemplateList() override = default; + + Options *GetOptions() override { return &m_options; } + + class CommandOptions : public Options { + public: + CommandOptions() = default; + ~CommandOptions() override = default; + Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg, + ExecutionContext *execution_context) override { + Status error; + const int short_option = m_getopt_table[option_idx].val; + + switch (short_option) { + case 'l': + m_language = (lldb::ScriptLanguage)OptionArgParser::ToOptionEnum( + option_arg, GetDefinitions()[option_idx].enum_values, + eScriptLanguageNone, error); + if (!error.Success()) + error.SetErrorStringWithFormat("unrecognized value for language '%s'", + option_arg.str().c_str()); + break; + default: + llvm_unreachable("Unimplemented option"); + } + + return error; + } + + void OptionParsingStarting(ExecutionContext *execution_context) override { + m_language = lldb::eScriptLanguageDefault; + } + + llvm::ArrayRef<OptionDefinition> GetDefinitions() override { + return llvm::ArrayRef(g_scripting_template_list_options); + } + + lldb::ScriptLanguage m_language = lldb::eScriptLanguageDefault; + }; + +protected: + void DoExecute(Args &command, CommandReturnObject &result) override { + Stream &s = result.GetOutputStream(); + s.Printf("Available scripted extension templates:"); + + auto print_field = [&s](llvm::StringRef key, llvm::StringRef value, + bool check_validity = false) { + if (!check_validity || !value.empty()) { + s.IndentMore(); + s.Indent(); + s << key << ": " << value << '\n'; + s.IndentLess(); + } + }; + + auto print_usages = [&s](llvm::StringRef usage_kind, + std::vector<llvm::StringRef> &usages) { + s.IndentMore(); + s.Indent(); + s << usage_kind << " Usages:"; + if (usages.empty()) + s << " None\n"; + else if (usages.size() == 1) + s << " " << usages.front() << '\n'; + else { + s << '\n'; + for (llvm::StringRef usage : usages) { + s.IndentMore(); + s.Indent(); + s << usage << '\n'; + s.IndentLess(); + } + } + s.IndentLess(); + }; + + size_t num_listed_interface = 0; + size_t num_templates = PluginManager::GetNumScriptedInterfaces(); + for (size_t i = 0; i < num_templates; i++) { + llvm::StringRef plugin_name = + PluginManager::GetScriptedInterfaceNameAtIndex(i); + if (plugin_name.empty()) + break; + + lldb::ScriptLanguage lang = + PluginManager::GetScriptedInterfaceLanguageAtIndex(i); + if (lang != m_options.m_language) + continue; + + if (!num_listed_interface) + s.EOL(); + + num_listed_interface++; + + llvm::StringRef desc = + PluginManager::GetScriptedInterfaceDescriptionAtIndex(i); + std::vector<llvm::StringRef> ci_usages = + PluginManager::GetScriptedInterfaceCommandInterpreterUsagesAtIndex(i); + std::vector<llvm::StringRef> api_usages = + PluginManager::GetScriptedInterfaceAPIUsagesAtIndex(i); + + print_field("Name", plugin_name); + print_field("Language", ScriptInterpreter::LanguageToString(lang)); + print_field("Description", desc); + print_usages("Command Interpreter", ci_usages); + print_usages("API", api_usages); + + if (i != num_templates - 1) + s.EOL(); + } + + if (!num_listed_interface) + s << " None\n"; + } + +private: + CommandOptions m_options; +}; + +#pragma mark CommandObjectMultiwordScriptingTemplate + +// CommandObjectMultiwordScriptingTemplate ---------------- JDevlieghere wrote:
Remove https://github.com/llvm/llvm-project/pull/97273 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits