130fdc8d8SChris Lattner //===-- CommandObjectHelp.h -------------------------------------*- C++ -*-===//
230fdc8d8SChris Lattner //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
630fdc8d8SChris Lattner //
730fdc8d8SChris Lattner //===----------------------------------------------------------------------===//
830fdc8d8SChris Lattner 
9cdc514e4SJonas Devlieghere #ifndef LLDB_SOURCE_COMMANDS_COMMANDOBJECTHELP_H
10cdc514e4SJonas Devlieghere #define LLDB_SOURCE_COMMANDS_COMMANDOBJECTHELP_H
1130fdc8d8SChris Lattner 
123eb2b44dSZachary Turner #include "lldb/Host/OptionParser.h"
1330fdc8d8SChris Lattner #include "lldb/Interpreter/CommandObject.h"
1408633eeaSEnrico Granata #include "lldb/Interpreter/Options.h"
1530fdc8d8SChris Lattner 
1630fdc8d8SChris Lattner namespace lldb_private {
1730fdc8d8SChris Lattner 
1830fdc8d8SChris Lattner // CommandObjectHelp
1930fdc8d8SChris Lattner 
20b9c1b51eSKate Stone class CommandObjectHelp : public CommandObjectParsed {
2130fdc8d8SChris Lattner public:
22a7015092SGreg Clayton   CommandObjectHelp(CommandInterpreter &interpreter);
2330fdc8d8SChris Lattner 
241fb7e202SPavel Labath   ~CommandObjectHelp() override;
2530fdc8d8SChris Lattner 
26ae34ed2cSRaphael Isemann   void HandleCompletion(CompletionRequest &request) override;
2730fdc8d8SChris Lattner 
28b9c1b51eSKate Stone   static void GenerateAdditionalHelpAvenuesMessage(
29a49c2019SZachary Turner       Stream *s, llvm::StringRef command, llvm::StringRef prefix,
30d5b44036SJonas Devlieghere       llvm::StringRef subcommand, bool include_upropos = true,
3146d4aa21SEnrico Granata       bool include_type_lookup = true);
3246d4aa21SEnrico Granata 
33b9c1b51eSKate Stone   class CommandOptions : public Options {
3408633eeaSEnrico Granata   public:
35*91688716SJonas Devlieghere     CommandOptions() = default;
3608633eeaSEnrico Granata 
37fd2433e1SJonas Devlieghere     ~CommandOptions() override = default;
3808633eeaSEnrico Granata 
SetOptionValue(uint32_t option_idx,llvm::StringRef option_arg,ExecutionContext * execution_context)3997206d57SZachary Turner     Status SetOptionValue(uint32_t option_idx, llvm::StringRef option_arg,
40b9c1b51eSKate Stone                           ExecutionContext *execution_context) override {
4197206d57SZachary Turner       Status error;
423bcdfc0eSGreg Clayton       const int short_option = m_getopt_table[option_idx].val;
4308633eeaSEnrico Granata 
44b9c1b51eSKate Stone       switch (short_option) {
4508633eeaSEnrico Granata       case 'a':
46a487aa4cSKate Stone         m_show_aliases = false;
4708633eeaSEnrico Granata         break;
4808633eeaSEnrico Granata       case 'u':
4908633eeaSEnrico Granata         m_show_user_defined = false;
5008633eeaSEnrico Granata         break;
51a487aa4cSKate Stone       case 'h':
52a487aa4cSKate Stone         m_show_hidden = true;
53a487aa4cSKate Stone         break;
5408633eeaSEnrico Granata       default:
5536162014SRaphael Isemann         llvm_unreachable("Unimplemented option");
5608633eeaSEnrico Granata       }
5708633eeaSEnrico Granata 
5808633eeaSEnrico Granata       return error;
5908633eeaSEnrico Granata     }
6008633eeaSEnrico Granata 
OptionParsingStarting(ExecutionContext * execution_context)61b9c1b51eSKate Stone     void OptionParsingStarting(ExecutionContext *execution_context) override {
62a487aa4cSKate Stone       m_show_aliases = true;
6308633eeaSEnrico Granata       m_show_user_defined = true;
64a487aa4cSKate Stone       m_show_hidden = false;
6508633eeaSEnrico Granata     }
6608633eeaSEnrico Granata 
671f0f5b5bSZachary Turner     llvm::ArrayRef<OptionDefinition> GetDefinitions() override;
6808633eeaSEnrico Granata 
6908633eeaSEnrico Granata     // Instance variables to hold the values for command options.
7008633eeaSEnrico Granata 
7108633eeaSEnrico Granata     bool m_show_aliases;
7208633eeaSEnrico Granata     bool m_show_user_defined;
73a487aa4cSKate Stone     bool m_show_hidden;
7408633eeaSEnrico Granata   };
7508633eeaSEnrico Granata 
GetOptions()76b9c1b51eSKate Stone   Options *GetOptions() override { return &m_options; }
7708633eeaSEnrico Granata 
785a988416SJim Ingham protected:
79b9c1b51eSKate Stone   bool DoExecute(Args &command, CommandReturnObject &result) override;
805a988416SJim Ingham 
815a988416SJim Ingham private:
825a988416SJim Ingham   CommandOptions m_options;
8330fdc8d8SChris Lattner };
8430fdc8d8SChris Lattner 
8530fdc8d8SChris Lattner } // namespace lldb_private
8630fdc8d8SChris Lattner 
87cdc514e4SJonas Devlieghere #endif // LLDB_SOURCE_COMMANDS_COMMANDOBJECTHELP_H
88