//===-- CommandCompletions.h ------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLDB_INTERPRETER_COMMANDCOMPLETIONS_H #define LLDB_INTERPRETER_COMMANDCOMPLETIONS_H #include #include "lldb/Core/FileSpecList.h" #include "lldb/Core/SearchFilter.h" #include "lldb/Interpreter/Options.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: enum CommonCompletionTypes { 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), eRegisterCompletion = (1u << 9), eBreakpointCompletion = (1u << 10), eProcessPluginCompletion = (1u << 11), eDisassemblyFlavorCompletion = (1u << 12), eTypeLanguageCompletion = (1u << 13), eFrameIndexCompletion = (1u << 14), eModuleUUIDCompletion = (1u << 15), eStopHookIDCompletion = (1u << 16), eThreadIndexCompletion = (1u << 17), eWatchPointIDCompletion = (1u << 18), eBreakpointNameCompletion = (1u << 19), eProcessIDCompletion = (1u << 20), eProcessNameCompletion = (1u << 21), eRemoteDiskFileCompletion = (1u << 22), eRemoteDiskDirectoryCompletion = (1u << 23), eTypeCategoryNameCompletion = (1u << 24), // 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 << 24) }; static bool InvokeCommonCompletionCallbacks( CommandInterpreter &interpreter, uint32_t completion_mask, lldb_private::CompletionRequest &request, SearchFilter *searcher); // These are the generic completer functions: static void DiskFiles(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void DiskFiles(const llvm::Twine &partial_file_name, StringList &matches, TildeExpressionResolver &Resolver); static void DiskDirectories(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void DiskDirectories(const llvm::Twine &partial_file_name, StringList &matches, TildeExpressionResolver &Resolver); static void RemoteDiskFiles(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void RemoteDiskDirectories(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void SourceFiles(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void Modules(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void ModuleUUIDs(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void Symbols(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void SettingsNames(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void PlatformPluginNames(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void ArchitectureNames(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void VariablePath(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void Registers(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void Breakpoints(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void BreakpointNames(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void ProcessPluginNames(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void ProcessIDs(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void ProcessNames(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void DisassemblyFlavors(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void TypeLanguages(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void FrameIndexes(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void StopHookIDs(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void ThreadIndexes(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void WatchPointIDs(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); static void TypeCategoryNames(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher); /// This completer works for commands whose only arguments are a command path. /// It isn't tied to an argument type because it completes not on a single /// argument but on the sequence of arguments, so you have to invoke it by /// hand. static void CompleteModifiableCmdPathArgs(CommandInterpreter &interpreter, CompletionRequest &request, OptionElementVector &opt_element_vector); }; } // namespace lldb_private #endif // LLDB_INTERPRETER_COMMANDCOMPLETIONS_H