blob: f330a745f9bd2e41b44c860363f400a621391216 [file] [log] [blame]
Andrew Walbran3d2c1972020-04-07 12:24:26 +01001//===-- 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
Olivier Deprezf4ef2d02021-04-20 13:36:24 +02009#ifndef LLDB_INTERPRETER_COMMANDOBJECTMULTIWORD_H
10#define LLDB_INTERPRETER_COMMANDOBJECTMULTIWORD_H
Andrew Walbran3d2c1972020-04-07 12:24:26 +010011
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
Olivier Deprezf4ef2d02021-04-20 13:36:24 +020053 void HandleCompletion(CompletionRequest &request) override;
Andrew Walbran3d2c1972020-04-07 12:24:26 +010054
55 const char *GetRepeatCommand(Args &current_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
Olivier Deprezf4ef2d02021-04-20 13:36:24 +020085 llvm::StringRef GetSyntax() override;
86
87 llvm::StringRef GetHelp() override;
88
Andrew Walbran3d2c1972020-04-07 12:24:26 +010089 llvm::StringRef GetHelpLong() override;
90
91 bool IsRemovable() const override;
92
93 bool IsMultiwordObject() override;
94
95 CommandObjectMultiword *GetAsMultiwordCommand() override;
96
97 void GenerateHelpText(Stream &result) override;
98
99 lldb::CommandObjectSP GetSubcommandSP(llvm::StringRef sub_cmd,
100 StringList *matches = nullptr) override;
101
102 CommandObject *GetSubcommandObject(llvm::StringRef sub_cmd,
103 StringList *matches = nullptr) override;
104
105 void AproposAllSubCommands(llvm::StringRef prefix,
106 llvm::StringRef search_word,
107 StringList &commands_found,
108 StringList &commands_help) override;
109
110 bool LoadSubCommand(llvm::StringRef cmd_name,
111 const lldb::CommandObjectSP &command_obj) override;
112
113 bool WantsRawCommandString() override;
114
115 bool WantsCompletion() override;
116
117 Options *GetOptions() override;
118
Olivier Deprezf4ef2d02021-04-20 13:36:24 +0200119 void HandleCompletion(CompletionRequest &request) override;
Andrew Walbran3d2c1972020-04-07 12:24:26 +0100120
Olivier Deprezf4ef2d02021-04-20 13:36:24 +0200121 void
122 HandleArgumentCompletion(CompletionRequest &request,
123 OptionElementVector &opt_element_vector) override;
Andrew Walbran3d2c1972020-04-07 12:24:26 +0100124
125 const char *GetRepeatCommand(Args &current_command_args,
126 uint32_t index) override;
127
Olivier Deprezf4ef2d02021-04-20 13:36:24 +0200128 /// \return
129 /// An error message to be displayed when the command is executed (i.e.
130 /// Execute is called) and \a GetProxyCommandObject returned null.
131 virtual llvm::StringRef GetUnsupportedError();
132
Andrew Walbran3d2c1972020-04-07 12:24:26 +0100133 bool Execute(const char *args_string, CommandReturnObject &result) override;
134
135protected:
136 // These two want to iterate over the subcommand dictionary.
137 friend class CommandInterpreter;
138 friend class CommandObjectSyntax;
139};
140
141} // namespace lldb_private
142
Olivier Deprezf4ef2d02021-04-20 13:36:24 +0200143#endif // LLDB_INTERPRETER_COMMANDOBJECTMULTIWORD_H