xref: /llvm-project/lldb/source/Commands/CommandObjectRegexCommand.h (revision 92d8a28cc665d73d9d679b8c014dd04f95d1df18)
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