File indexing completed on 2026-05-10 08:42:49
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLDB_INTERPRETER_COMMANDOBJECTMULTIWORD_H
0010 #define LLDB_INTERPRETER_COMMANDOBJECTMULTIWORD_H
0011
0012 #include "lldb/Interpreter/CommandObject.h"
0013 #include "lldb/Utility/CompletionRequest.h"
0014 #include <optional>
0015
0016 namespace lldb_private {
0017
0018
0019
0020 class CommandObjectMultiword : public CommandObject {
0021
0022 friend class CommandInterpreter;
0023 friend class CommandObjectSyntax;
0024
0025 public:
0026 CommandObjectMultiword(CommandInterpreter &interpreter, const char *name,
0027 const char *help = nullptr,
0028 const char *syntax = nullptr, uint32_t flags = 0);
0029
0030 ~CommandObjectMultiword() override;
0031
0032 bool IsMultiwordObject() override { return true; }
0033
0034 CommandObjectMultiword *GetAsMultiwordCommand() override { return this; }
0035
0036 bool LoadSubCommand(llvm::StringRef cmd_name,
0037 const lldb::CommandObjectSP &command_obj) override;
0038
0039 llvm::Error LoadUserSubcommand(llvm::StringRef cmd_name,
0040 const lldb::CommandObjectSP &command_obj,
0041 bool can_replace) override;
0042
0043 llvm::Error RemoveUserSubcommand(llvm::StringRef cmd_name, bool multiword_okay);
0044
0045 void GenerateHelpText(Stream &output_stream) override;
0046
0047 lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
0048 StringList *matches = nullptr) override;
0049
0050 lldb::CommandObjectSP GetSubcommandSPExact(llvm::StringRef sub_cmd) override;
0051
0052 CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
0053 StringList *matches = nullptr) override;
0054
0055 bool WantsRawCommandString() override { return false; }
0056
0057 void HandleCompletion(CompletionRequest &request) override;
0058
0059 std::optional<std::string> GetRepeatCommand(Args ¤t_command_args,
0060 uint32_t index) override;
0061
0062 void Execute(const char *args_string, CommandReturnObject &result) override;
0063
0064 bool IsRemovable() const override { return m_can_be_removed; }
0065
0066 void SetRemovable(bool removable) { m_can_be_removed = removable; }
0067
0068 protected:
0069 CommandObject::CommandMap &GetSubcommandDictionary() {
0070 return m_subcommand_dict;
0071 }
0072
0073 std::string GetSubcommandsHintText();
0074
0075 CommandObject::CommandMap m_subcommand_dict;
0076 bool m_can_be_removed;
0077 };
0078
0079 class CommandObjectProxy : public CommandObject {
0080 public:
0081 CommandObjectProxy(CommandInterpreter &interpreter, const char *name,
0082 const char *help = nullptr, const char *syntax = nullptr,
0083 uint32_t flags = 0);
0084
0085 ~CommandObjectProxy() override;
0086
0087
0088
0089 virtual CommandObject *GetProxyCommandObject() = 0;
0090
0091 llvm::StringRef GetSyntax() override;
0092
0093 llvm::StringRef GetHelp() override;
0094
0095 llvm::StringRef GetHelpLong() override;
0096
0097 bool IsRemovable() const override;
0098
0099 bool IsMultiwordObject() override;
0100
0101 CommandObjectMultiword *GetAsMultiwordCommand() override;
0102
0103 void GenerateHelpText(Stream &result) override;
0104
0105 lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
0106 StringList *matches = nullptr) override;
0107
0108 CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
0109 StringList *matches = nullptr) override;
0110
0111 bool LoadSubCommand(llvm::StringRef cmd_name,
0112 const lldb::CommandObjectSP &command_obj) override;
0113
0114 bool WantsRawCommandString() override;
0115
0116 bool WantsCompletion() override;
0117
0118 Options *GetOptions() override;
0119
0120 void HandleCompletion(CompletionRequest &request) override;
0121
0122 void
0123 HandleArgumentCompletion(CompletionRequest &request,
0124 OptionElementVector &opt_element_vector) override;
0125
0126 std::optional<std::string> GetRepeatCommand(Args ¤t_command_args,
0127 uint32_t index) override;
0128
0129
0130
0131
0132 virtual llvm::StringRef GetUnsupportedError();
0133
0134 void Execute(const char *args_string, CommandReturnObject &result) override;
0135
0136 protected:
0137
0138 friend class CommandInterpreter;
0139 friend class CommandObjectSyntax;
0140 };
0141
0142 }
0143
0144 #endif