1 //===-- CommandAlias.h -----------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_CommandAlias_h_ 11 #define liblldb_CommandAlias_h_ 12 13 #include <memory> 14 15 #include "lldb/Interpreter/CommandObject.h" 16 #include "lldb/Utility/Args.h" 17 #include "lldb/Utility/CompletionRequest.h" 18 #include "lldb/lldb-forward.h" 19 20 namespace lldb_private { 21 class CommandAlias : public CommandObject { 22 public: 23 typedef std::unique_ptr<CommandAlias> UniquePointer; 24 25 CommandAlias(CommandInterpreter &interpreter, lldb::CommandObjectSP cmd_sp, 26 llvm::StringRef options_args, llvm::StringRef name, 27 llvm::StringRef help = llvm::StringRef(), 28 llvm::StringRef syntax = llvm::StringRef(), uint32_t flags = 0); 29 30 void GetAliasExpansion(StreamString &help_string) const; 31 IsValid()32 bool IsValid() const { return m_underlying_command_sp && m_option_args_sp; } 33 34 explicit operator bool() const { return IsValid(); } 35 36 bool WantsRawCommandString() override; 37 38 bool WantsCompletion() override; 39 40 int HandleCompletion(CompletionRequest &request) override; 41 42 int HandleArgumentCompletion( 43 CompletionRequest &request, 44 OptionElementVector &opt_element_vector) override; 45 46 Options *GetOptions() override; 47 IsAlias()48 bool IsAlias() override { return true; } 49 50 bool IsDashDashCommand() override; 51 52 llvm::StringRef GetHelp() override; 53 54 llvm::StringRef GetHelpLong() override; 55 56 void SetHelp(llvm::StringRef str) override; 57 58 void SetHelpLong(llvm::StringRef str) override; 59 60 bool Execute(const char *args_string, CommandReturnObject &result) override; 61 GetUnderlyingCommand()62 lldb::CommandObjectSP GetUnderlyingCommand() { 63 return m_underlying_command_sp; 64 } GetOptionArguments()65 OptionArgVectorSP GetOptionArguments() const { return m_option_args_sp; } GetOptionString()66 const char *GetOptionString() { return m_option_string.c_str(); } 67 68 // this takes an alias - potentially nested (i.e. an alias to an alias) and 69 // expands it all the way to a non-alias command 70 std::pair<lldb::CommandObjectSP, OptionArgVectorSP> Desugar(); 71 72 protected: 73 bool IsNestedAlias(); 74 75 private: 76 lldb::CommandObjectSP m_underlying_command_sp; 77 std::string m_option_string; 78 OptionArgVectorSP m_option_args_sp; 79 LazyBool m_is_dashdash_alias; 80 bool m_did_set_help : 1; 81 bool m_did_set_help_long : 1; 82 }; 83 } // namespace lldb_private 84 85 #endif // liblldb_CommandAlias_h_ 86