1 //===-- CommandObjectMultiword.h --------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_CommandObjectMultiword_h_
11 #define liblldb_CommandObjectMultiword_h_
15 // Other libraries and framework includes
17 #include "lldb/Interpreter/CommandObject.h"
18 #include "lldb/Utility/CompletionRequest.h"
20 namespace lldb_private {
22 //-------------------------------------------------------------------------
23 // CommandObjectMultiword
24 //-------------------------------------------------------------------------
26 class CommandObjectMultiword : public CommandObject {
27 // These two want to iterate over the subcommand dictionary.
28 friend class CommandInterpreter;
29 friend class CommandObjectSyntax;
32 CommandObjectMultiword(CommandInterpreter &interpreter, const char *name,
33 const char *help = nullptr,
34 const char *syntax = nullptr, uint32_t flags = 0);
36 ~CommandObjectMultiword() override;
38 bool IsMultiwordObject() override { return true; }
40 CommandObjectMultiword *GetAsMultiwordCommand() override { return this; }
42 bool LoadSubCommand(llvm::StringRef cmd_name,
43 const lldb::CommandObjectSP &command_obj) override;
45 void GenerateHelpText(Stream &output_stream) override;
47 lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
48 StringList *matches = nullptr) override;
50 CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
51 StringList *matches = nullptr) override;
53 void AproposAllSubCommands(llvm::StringRef prefix,
54 llvm::StringRef search_word,
55 StringList &commands_found,
56 StringList &commands_help) override;
58 bool WantsRawCommandString() override { return false; }
60 int HandleCompletion(CompletionRequest &request) override;
62 const char *GetRepeatCommand(Args ¤t_command_args,
63 uint32_t index) override;
65 bool Execute(const char *args_string, CommandReturnObject &result) override;
67 bool IsRemovable() const override { return m_can_be_removed; }
69 void SetRemovable(bool removable) { m_can_be_removed = removable; }
72 CommandObject::CommandMap &GetSubcommandDictionary() {
73 return m_subcommand_dict;
76 CommandObject::CommandMap m_subcommand_dict;
77 bool m_can_be_removed;
80 class CommandObjectProxy : public CommandObject {
82 CommandObjectProxy(CommandInterpreter &interpreter, const char *name,
83 const char *help = nullptr, const char *syntax = nullptr,
86 ~CommandObjectProxy() override;
88 // Subclasses must provide a command object that will be transparently used
90 virtual CommandObject *GetProxyCommandObject() = 0;
92 llvm::StringRef GetHelpLong() override;
94 bool IsRemovable() const override;
96 bool IsMultiwordObject() override;
98 CommandObjectMultiword *GetAsMultiwordCommand() override;
100 void GenerateHelpText(Stream &result) override;
102 lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
103 StringList *matches = nullptr) override;
105 CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
106 StringList *matches = nullptr) override;
108 void AproposAllSubCommands(llvm::StringRef prefix,
109 llvm::StringRef search_word,
110 StringList &commands_found,
111 StringList &commands_help) override;
113 bool LoadSubCommand(llvm::StringRef cmd_name,
114 const lldb::CommandObjectSP &command_obj) override;
116 bool WantsRawCommandString() override;
118 bool WantsCompletion() override;
120 Options *GetOptions() override;
122 int HandleCompletion(CompletionRequest &request) override;
124 int HandleArgumentCompletion(
125 CompletionRequest &request,
126 OptionElementVector &opt_element_vector) override;
128 const char *GetRepeatCommand(Args ¤t_command_args,
129 uint32_t index) override;
131 bool Execute(const char *args_string, CommandReturnObject &result) override;
134 // These two want to iterate over the subcommand dictionary.
135 friend class CommandInterpreter;
136 friend class CommandObjectSyntax;
139 } // namespace lldb_private
141 #endif // liblldb_CommandObjectMultiword_h_