| //===-- CommandCompletions.h ------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef lldb_CommandCompletions_h_ |
| #define lldb_CommandCompletions_h_ |
| |
| // C Includes |
| // C++ Includes |
| #include <set> |
| |
| // Other libraries and framework includes |
| // Project includes |
| #include "lldb/Core/FileSpecList.h" |
| #include "lldb/Core/SearchFilter.h" |
| #include "lldb/Utility/CompletionRequest.h" |
| #include "lldb/Utility/RegularExpression.h" |
| #include "lldb/lldb-private.h" |
| |
| #include "llvm/ADT/Twine.h" |
| |
| namespace lldb_private { |
| class TildeExpressionResolver; |
| class CommandCompletions { |
| public: |
| //---------------------------------------------------------------------- |
| // This is the command completion callback that is used to complete the |
| // argument of the option it is bound to (in the OptionDefinition table |
| // below). Return the total number of matches. |
| //---------------------------------------------------------------------- |
| typedef int (*CompletionCallback)(CommandInterpreter &interpreter, |
| CompletionRequest &request, |
| // A search filter to limit the search... |
| lldb_private::SearchFilter *searcher); |
| typedef enum { |
| eNoCompletion = 0u, |
| eSourceFileCompletion = (1u << 0), |
| eDiskFileCompletion = (1u << 1), |
| eDiskDirectoryCompletion = (1u << 2), |
| eSymbolCompletion = (1u << 3), |
| eModuleCompletion = (1u << 4), |
| eSettingsNameCompletion = (1u << 5), |
| ePlatformPluginCompletion = (1u << 6), |
| eArchitectureCompletion = (1u << 7), |
| eVariablePathCompletion = (1u << 8), |
| // This item serves two purposes. It is the last element in the enum, so |
| // you can add custom enums starting from here in your Option class. Also |
| // if you & in this bit the base code will not process the option. |
| eCustomCompletion = (1u << 9) |
| } CommonCompletionTypes; |
| |
| struct CommonCompletionElement { |
| uint32_t type; |
| CompletionCallback callback; |
| }; |
| |
| static bool InvokeCommonCompletionCallbacks( |
| CommandInterpreter &interpreter, uint32_t completion_mask, |
| lldb_private::CompletionRequest &request, SearchFilter *searcher); |
| |
| //---------------------------------------------------------------------- |
| // These are the generic completer functions: |
| //---------------------------------------------------------------------- |
| static int DiskFiles(CommandInterpreter &interpreter, |
| CompletionRequest &request, SearchFilter *searcher); |
| |
| static int DiskFiles(const llvm::Twine &partial_file_name, |
| StringList &matches, TildeExpressionResolver &Resolver); |
| |
| static int DiskDirectories(CommandInterpreter &interpreter, |
| CompletionRequest &request, |
| SearchFilter *searcher); |
| |
| static int DiskDirectories(const llvm::Twine &partial_file_name, |
| StringList &matches, |
| TildeExpressionResolver &Resolver); |
| |
| static int SourceFiles(CommandInterpreter &interpreter, |
| CompletionRequest &request, SearchFilter *searcher); |
| |
| static int Modules(CommandInterpreter &interpreter, |
| CompletionRequest &request, SearchFilter *searcher); |
| |
| static int Symbols(CommandInterpreter &interpreter, |
| CompletionRequest &request, SearchFilter *searcher); |
| |
| static int SettingsNames(CommandInterpreter &interpreter, |
| CompletionRequest &request, SearchFilter *searcher); |
| |
| static int PlatformPluginNames(CommandInterpreter &interpreter, |
| CompletionRequest &request, |
| SearchFilter *searcher); |
| |
| static int ArchitectureNames(CommandInterpreter &interpreter, |
| CompletionRequest &request, |
| SearchFilter *searcher); |
| |
| static int VariablePath(CommandInterpreter &interpreter, |
| CompletionRequest &request, SearchFilter *searcher); |
| |
| //---------------------------------------------------------------------- |
| // The Completer class is a convenient base class for building searchers that |
| // go along with the SearchFilter passed to the standard Completer functions. |
| //---------------------------------------------------------------------- |
| class Completer : public Searcher { |
| public: |
| Completer(CommandInterpreter &interpreter, CompletionRequest &request); |
| |
| ~Completer() override; |
| |
| CallbackReturn SearchCallback(SearchFilter &filter, SymbolContext &context, |
| Address *addr, bool complete) override = 0; |
| |
| Depth GetDepth() override = 0; |
| |
| virtual size_t DoCompletion(SearchFilter *filter) = 0; |
| |
| protected: |
| CommandInterpreter &m_interpreter; |
| CompletionRequest &m_request; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(Completer); |
| }; |
| |
| //---------------------------------------------------------------------- |
| // SourceFileCompleter implements the source file completer |
| //---------------------------------------------------------------------- |
| class SourceFileCompleter : public Completer { |
| public: |
| SourceFileCompleter(CommandInterpreter &interpreter, |
| bool include_support_files, CompletionRequest &request); |
| |
| Searcher::Depth GetDepth() override; |
| |
| Searcher::CallbackReturn SearchCallback(SearchFilter &filter, |
| SymbolContext &context, |
| Address *addr, |
| bool complete) override; |
| |
| size_t DoCompletion(SearchFilter *filter) override; |
| |
| private: |
| bool m_include_support_files; |
| FileSpecList m_matching_files; |
| const char *m_file_name; |
| const char *m_dir_name; |
| |
| DISALLOW_COPY_AND_ASSIGN(SourceFileCompleter); |
| }; |
| |
| //---------------------------------------------------------------------- |
| // ModuleCompleter implements the module completer |
| //---------------------------------------------------------------------- |
| class ModuleCompleter : public Completer { |
| public: |
| ModuleCompleter(CommandInterpreter &interpreter, |
| CompletionRequest &request); |
| |
| Searcher::Depth GetDepth() override; |
| |
| Searcher::CallbackReturn SearchCallback(SearchFilter &filter, |
| SymbolContext &context, |
| Address *addr, |
| bool complete) override; |
| |
| size_t DoCompletion(SearchFilter *filter) override; |
| |
| private: |
| const char *m_file_name; |
| const char *m_dir_name; |
| |
| DISALLOW_COPY_AND_ASSIGN(ModuleCompleter); |
| }; |
| |
| //---------------------------------------------------------------------- |
| // SymbolCompleter implements the symbol completer |
| //---------------------------------------------------------------------- |
| class SymbolCompleter : public Completer { |
| public: |
| SymbolCompleter(CommandInterpreter &interpreter, |
| CompletionRequest &request); |
| |
| Searcher::Depth GetDepth() override; |
| |
| Searcher::CallbackReturn SearchCallback(SearchFilter &filter, |
| SymbolContext &context, |
| Address *addr, |
| bool complete) override; |
| |
| size_t DoCompletion(SearchFilter *filter) override; |
| |
| private: |
| // struct NameCmp { |
| // bool operator() (const ConstString& lhs, const ConstString& |
| // rhs) const |
| // { |
| // return lhs < rhs; |
| // } |
| // }; |
| |
| RegularExpression m_regex; |
| typedef std::set<ConstString> collection; |
| collection m_match_set; |
| |
| DISALLOW_COPY_AND_ASSIGN(SymbolCompleter); |
| }; |
| |
| private: |
| static CommonCompletionElement g_common_completions[]; |
| }; |
| |
| } // namespace lldb_private |
| |
| #endif // lldb_CommandCompletions_h_ |