1 //===-- CommandObjectMultiword.h --------------------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef liblldb_CommandObjectMultiword_h_
10 #define liblldb_CommandObjectMultiword_h_
12 #include "lldb/Interpreter/CommandObject.h"
13 #include "lldb/Utility/CompletionRequest.h"
15 namespace lldb_private {
17 // CommandObjectMultiword
19 class CommandObjectMultiword : public CommandObject {
20 // These two want to iterate over the subcommand dictionary.
21 friend class CommandInterpreter;
22 friend class CommandObjectSyntax;
25 CommandObjectMultiword(CommandInterpreter &interpreter, const char *name,
26 const char *help = nullptr,
27 const char *syntax = nullptr, uint32_t flags = 0);
29 ~CommandObjectMultiword() override;
31 bool IsMultiwordObject() override { return true; }
33 CommandObjectMultiword *GetAsMultiwordCommand() override { return this; }
35 bool LoadSubCommand(llvm::StringRef cmd_name,
36 const lldb::CommandObjectSP &command_obj) override;
38 void GenerateHelpText(Stream &output_stream) override;
40 lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
41 StringList *matches = nullptr) override;
43 CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
44 StringList *matches = nullptr) override;
46 void AproposAllSubCommands(llvm::StringRef prefix,
47 llvm::StringRef search_word,
48 StringList &commands_found,
49 StringList &commands_help) override;
51 bool WantsRawCommandString() override { return false; }
53 int HandleCompletion(CompletionRequest &request) override;
55 const char *GetRepeatCommand(Args ¤t_command_args,
56 uint32_t index) override;
58 bool Execute(const char *args_string, CommandReturnObject &result) override;
60 bool IsRemovable() const override { return m_can_be_removed; }
62 void SetRemovable(bool removable) { m_can_be_removed = removable; }
65 CommandObject::CommandMap &GetSubcommandDictionary() {
66 return m_subcommand_dict;
69 CommandObject::CommandMap m_subcommand_dict;
70 bool m_can_be_removed;
73 class CommandObjectProxy : public CommandObject {
75 CommandObjectProxy(CommandInterpreter &interpreter, const char *name,
76 const char *help = nullptr, const char *syntax = nullptr,
79 ~CommandObjectProxy() override;
81 // Subclasses must provide a command object that will be transparently used
83 virtual CommandObject *GetProxyCommandObject() = 0;
85 llvm::StringRef GetHelpLong() override;
87 bool IsRemovable() const override;
89 bool IsMultiwordObject() override;
91 CommandObjectMultiword *GetAsMultiwordCommand() override;
93 void GenerateHelpText(Stream &result) override;
95 lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
96 StringList *matches = nullptr) override;
98 CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
99 StringList *matches = nullptr) override;
101 void AproposAllSubCommands(llvm::StringRef prefix,
102 llvm::StringRef search_word,
103 StringList &commands_found,
104 StringList &commands_help) override;
106 bool LoadSubCommand(llvm::StringRef cmd_name,
107 const lldb::CommandObjectSP &command_obj) override;
109 bool WantsRawCommandString() override;
111 bool WantsCompletion() override;
113 Options *GetOptions() override;
115 int HandleCompletion(CompletionRequest &request) override;
117 int HandleArgumentCompletion(
118 CompletionRequest &request,
119 OptionElementVector &opt_element_vector) override;
121 const char *GetRepeatCommand(Args ¤t_command_args,
122 uint32_t index) override;
124 bool Execute(const char *args_string, CommandReturnObject &result) override;
127 // These two want to iterate over the subcommand dictionary.
128 friend class CommandInterpreter;
129 friend class CommandObjectSyntax;
132 } // namespace lldb_private
134 #endif // liblldb_CommandObjectMultiword_h_