1//===-- CommandObjectMultiword.h --------------------------------*- C++ -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#ifndef liblldb_CommandObjectMultiword_h_ 10#define liblldb_CommandObjectMultiword_h_ 11 12#include "lldb/Interpreter/CommandObject.h" 13#include "lldb/Utility/CompletionRequest.h" 14 15namespace lldb_private { 16 17// CommandObjectMultiword 18 19class CommandObjectMultiword : public CommandObject { 20 // These two want to iterate over the subcommand dictionary. 21 friend class CommandInterpreter; 22 friend class CommandObjectSyntax; 23 24public: 25 CommandObjectMultiword(CommandInterpreter &interpreter, const char *name, 26 const char *help = nullptr, 27 const char *syntax = nullptr, uint32_t flags = 0); 28 29 ~CommandObjectMultiword() override; 30 31 bool IsMultiwordObject() override { return true; } 32 33 CommandObjectMultiword *GetAsMultiwordCommand() override { return this; } 34 35 bool LoadSubCommand(llvm::StringRef cmd_name, 36 const lldb::CommandObjectSP &command_obj) override; 37 38 void GenerateHelpText(Stream &output_stream) override; 39 40 lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd, 41 StringList *matches = nullptr) override; 42 43 CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd, 44 StringList *matches = nullptr) override; 45 46 void AproposAllSubCommands(llvm::StringRef prefix, 47 llvm::StringRef search_word, 48 StringList &commands_found, 49 StringList &commands_help) override; 50 51 bool WantsRawCommandString() override { return false; } 52 53 void HandleCompletion(CompletionRequest &request) override; 54 55 const char *GetRepeatCommand(Args ¤t_command_args, 56 uint32_t index) override; 57 58 bool Execute(const char *args_string, CommandReturnObject &result) override; 59 60 bool IsRemovable() const override { return m_can_be_removed; } 61 62 void SetRemovable(bool removable) { m_can_be_removed = removable; } 63 64protected: 65 CommandObject::CommandMap &GetSubcommandDictionary() { 66 return m_subcommand_dict; 67 } 68 69 CommandObject::CommandMap m_subcommand_dict; 70 bool m_can_be_removed; 71}; 72 73class CommandObjectProxy : public CommandObject { 74public: 75 CommandObjectProxy(CommandInterpreter &interpreter, const char *name, 76 const char *help = nullptr, const char *syntax = nullptr, 77 uint32_t flags = 0); 78 79 ~CommandObjectProxy() override; 80 81 // Subclasses must provide a command object that will be transparently used 82 // for this object. 83 virtual CommandObject *GetProxyCommandObject() = 0; 84 85 llvm::StringRef GetHelpLong() override; 86 87 bool IsRemovable() const override; 88 89 bool IsMultiwordObject() override; 90 91 CommandObjectMultiword *GetAsMultiwordCommand() override; 92 93 void GenerateHelpText(Stream &result) override; 94 95 lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd, 96 StringList *matches = nullptr) override; 97 98 CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd, 99 StringList *matches = nullptr) override; 100 101 void AproposAllSubCommands(llvm::StringRef prefix, 102 llvm::StringRef search_word, 103 StringList &commands_found, 104 StringList &commands_help) override; 105 106 bool LoadSubCommand(llvm::StringRef cmd_name, 107 const lldb::CommandObjectSP &command_obj) override; 108 109 bool WantsRawCommandString() override; 110 111 bool WantsCompletion() override; 112 113 Options *GetOptions() override; 114 115 void HandleCompletion(CompletionRequest &request) override; 116 117 void 118 HandleArgumentCompletion(CompletionRequest &request, 119 OptionElementVector &opt_element_vector) override; 120 121 const char *GetRepeatCommand(Args ¤t_command_args, 122 uint32_t index) override; 123 124 bool Execute(const char *args_string, CommandReturnObject &result) override; 125 126protected: 127 // These two want to iterate over the subcommand dictionary. 128 friend class CommandInterpreter; 129 friend class CommandObjectSyntax; 130}; 131 132} // namespace lldb_private 133 134#endif // liblldb_CommandObjectMultiword_h_ 135