xref: /openbsd-src/gnu/llvm/lldb/source/Commands/CommandObjectHelp.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1061da546Spatrick //===-- CommandObjectHelp.h -------------------------------------*- C++ -*-===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick 
9dda28197Spatrick #ifndef LLDB_SOURCE_COMMANDS_COMMANDOBJECTHELP_H
10dda28197Spatrick #define LLDB_SOURCE_COMMANDS_COMMANDOBJECTHELP_H
11061da546Spatrick 
12061da546Spatrick #include "lldb/Host/OptionParser.h"
13061da546Spatrick #include "lldb/Interpreter/CommandObject.h"
14061da546Spatrick #include "lldb/Interpreter/Options.h"
15061da546Spatrick 
16061da546Spatrick namespace lldb_private {
17061da546Spatrick 
18061da546Spatrick // CommandObjectHelp
19061da546Spatrick 
20061da546Spatrick class CommandObjectHelp : public CommandObjectParsed {
21061da546Spatrick public:
22061da546Spatrick   CommandObjectHelp(CommandInterpreter &interpreter);
23061da546Spatrick 
24061da546Spatrick   ~CommandObjectHelp() override;
25061da546Spatrick 
26061da546Spatrick   void HandleCompletion(CompletionRequest &request) override;
27061da546Spatrick 
28061da546Spatrick   static void GenerateAdditionalHelpAvenuesMessage(
29061da546Spatrick       Stream *s, llvm::StringRef command, llvm::StringRef prefix,
30061da546Spatrick       llvm::StringRef subcommand, bool include_upropos = true,
31061da546Spatrick       bool include_type_lookup = true);
32061da546Spatrick 
33061da546Spatrick   class CommandOptions : public Options {
34061da546Spatrick   public:
35*f6aab3d8Srobert     CommandOptions() = default;
36061da546Spatrick 
37be691f3bSpatrick     ~CommandOptions() override = default;
38061da546Spatrick 
SetOptionValue(uint32_t option_idx,llvm::StringRef option_arg,ExecutionContext * execution_context)39061da546Spatrick     Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg,
40061da546Spatrick                           ExecutionContext *execution_context) override {
41061da546Spatrick       Status error;
42061da546Spatrick       const int short_option = m_getopt_table[option_idx].val;
43061da546Spatrick 
44061da546Spatrick       switch (short_option) {
45061da546Spatrick       case 'a':
46061da546Spatrick         m_show_aliases = false;
47061da546Spatrick         break;
48061da546Spatrick       case 'u':
49061da546Spatrick         m_show_user_defined = false;
50061da546Spatrick         break;
51061da546Spatrick       case 'h':
52061da546Spatrick         m_show_hidden = true;
53061da546Spatrick         break;
54061da546Spatrick       default:
55061da546Spatrick         llvm_unreachable("Unimplemented option");
56061da546Spatrick       }
57061da546Spatrick 
58061da546Spatrick       return error;
59061da546Spatrick     }
60061da546Spatrick 
OptionParsingStarting(ExecutionContext * execution_context)61061da546Spatrick     void OptionParsingStarting(ExecutionContext *execution_context) override {
62061da546Spatrick       m_show_aliases = true;
63061da546Spatrick       m_show_user_defined = true;
64061da546Spatrick       m_show_hidden = false;
65061da546Spatrick     }
66061da546Spatrick 
67061da546Spatrick     llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
68061da546Spatrick 
69061da546Spatrick     // Instance variables to hold the values for command options.
70061da546Spatrick 
71061da546Spatrick     bool m_show_aliases;
72061da546Spatrick     bool m_show_user_defined;
73061da546Spatrick     bool m_show_hidden;
74061da546Spatrick   };
75061da546Spatrick 
GetOptions()76061da546Spatrick   Options *GetOptions() override { return &m_options; }
77061da546Spatrick 
78061da546Spatrick protected:
79061da546Spatrick   bool DoExecute(Args &command, CommandReturnObject &result) override;
80061da546Spatrick 
81061da546Spatrick private:
82061da546Spatrick   CommandOptions m_options;
83061da546Spatrick };
84061da546Spatrick 
85061da546Spatrick } // namespace lldb_private
86061da546Spatrick 
87dda28197Spatrick #endif // LLDB_SOURCE_COMMANDS_COMMANDOBJECTHELP_H
88