19390b346SJonas Devlieghere //===-- CommandObjectRegexCommand.h -----------------------------*- C++ -*-===// 29390b346SJonas Devlieghere // 39390b346SJonas Devlieghere // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 49390b346SJonas Devlieghere // See https://llvm.org/LICENSE.txt for license information. 59390b346SJonas Devlieghere // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 69390b346SJonas Devlieghere // 79390b346SJonas Devlieghere //===----------------------------------------------------------------------===// 89390b346SJonas Devlieghere 99390b346SJonas Devlieghere #ifndef LLDB_INTERPRETER_COMMANDOBJECTREGEXCOMMAND_H 109390b346SJonas Devlieghere #define LLDB_INTERPRETER_COMMANDOBJECTREGEXCOMMAND_H 119390b346SJonas Devlieghere 129390b346SJonas Devlieghere #include <list> 139390b346SJonas Devlieghere 149390b346SJonas Devlieghere #include "lldb/Interpreter/CommandObject.h" 159390b346SJonas Devlieghere #include "lldb/Utility/CompletionRequest.h" 169390b346SJonas Devlieghere #include "lldb/Utility/RegularExpression.h" 179390b346SJonas Devlieghere 189390b346SJonas Devlieghere namespace lldb_private { 199390b346SJonas Devlieghere 209390b346SJonas Devlieghere // CommandObjectRegexCommand 219390b346SJonas Devlieghere 229390b346SJonas Devlieghere class CommandObjectRegexCommand : public CommandObjectRaw { 239390b346SJonas Devlieghere public: 249390b346SJonas Devlieghere CommandObjectRegexCommand(CommandInterpreter &interpreter, 259390b346SJonas Devlieghere llvm::StringRef name, llvm::StringRef help, 2682352538SDave Lee llvm::StringRef syntax, 279390b346SJonas Devlieghere uint32_t completion_type_mask, bool is_removable); 289390b346SJonas Devlieghere 299390b346SJonas Devlieghere ~CommandObjectRegexCommand() override; 309390b346SJonas Devlieghere IsRemovable()319390b346SJonas Devlieghere bool IsRemovable() const override { return m_is_removable; } 329390b346SJonas Devlieghere 339390b346SJonas Devlieghere bool AddRegexCommand(llvm::StringRef re_cstr, llvm::StringRef command_cstr); 349390b346SJonas Devlieghere HasRegexEntries()359390b346SJonas Devlieghere bool HasRegexEntries() const { return !m_entries.empty(); } 369390b346SJonas Devlieghere 379390b346SJonas Devlieghere void HandleCompletion(CompletionRequest &request) override; 389390b346SJonas Devlieghere 399390b346SJonas Devlieghere protected: 40*92d8a28cSPete Lawrence void DoExecute(llvm::StringRef command, CommandReturnObject &result) override; 419390b346SJonas Devlieghere 422a6dbedfSJonas Devlieghere /// Substitute variables of the format %\d+ in the input string. 432a6dbedfSJonas Devlieghere static llvm::Expected<std::string> SubstituteVariables( 442a6dbedfSJonas Devlieghere llvm::StringRef input, 452a6dbedfSJonas Devlieghere const llvm::SmallVectorImpl<llvm::StringRef> &replacements); 462a6dbedfSJonas Devlieghere 479390b346SJonas Devlieghere struct Entry { 489390b346SJonas Devlieghere RegularExpression regex; 499390b346SJonas Devlieghere std::string command; 509390b346SJonas Devlieghere }; 519390b346SJonas Devlieghere 529390b346SJonas Devlieghere typedef std::list<Entry> EntryCollection; 539390b346SJonas Devlieghere const uint32_t m_completion_type_mask; 549390b346SJonas Devlieghere EntryCollection m_entries; 559390b346SJonas Devlieghere bool m_is_removable; 569390b346SJonas Devlieghere 579390b346SJonas Devlieghere private: 589390b346SJonas Devlieghere CommandObjectRegexCommand(const CommandObjectRegexCommand &) = delete; 599390b346SJonas Devlieghere const CommandObjectRegexCommand & 609390b346SJonas Devlieghere operator=(const CommandObjectRegexCommand &) = delete; 619390b346SJonas Devlieghere }; 629390b346SJonas Devlieghere 639390b346SJonas Devlieghere } // namespace lldb_private 649390b346SJonas Devlieghere 659390b346SJonas Devlieghere #endif // LLDB_INTERPRETER_COMMANDOBJECTREGEXCOMMAND_H 66