diff options
author | Gongyu Deng <gy_deng@icloud.com> | 2020-08-24 14:23:23 +0200 |
---|---|---|
committer | Raphael Isemann <teemperor@gmail.com> | 2020-08-24 17:30:43 +0200 |
commit | 19311f5c3e9ada9d445e49feb7a2ae00ddaee2fa (patch) | |
tree | 0683c608ce9c62759e81b639ea0fd8336aa452e4 /lldb/source/Commands/CommandCompletions.cpp | |
parent | d1a1cce5b130630df0c821e8cafe5f683ccccb90 (diff) | |
download | llvm-19311f5c3e9ada9d445e49feb7a2ae00ddaee2fa.zip llvm-19311f5c3e9ada9d445e49feb7a2ae00ddaee2fa.tar.gz llvm-19311f5c3e9ada9d445e49feb7a2ae00ddaee2fa.tar.bz2 |
[lldb] common completion for process pids and process names
1. Added two common completions: `ProcessIDs` and `ProcessNames`, which are
refactored from their original dedicated option completions;
2. Removed the dedicated option completion functions of `process attach` and
`platform process attach`, so that they can use arg-type-bound common
completions instead;
3. Bound `eArgTypePid` to the pid completion, `eArgTypeProcessName` to the
process name completion in `CommandObject.cpp`;
4. Added a related test case.
Reviewed By: teemperor
Differential Revision: https://reviews.llvm.org/D80700
Diffstat (limited to 'lldb/source/Commands/CommandCompletions.cpp')
-rw-r--r-- | lldb/source/Commands/CommandCompletions.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lldb/source/Commands/CommandCompletions.cpp b/lldb/source/Commands/CommandCompletions.cpp index 109613e..9e74d8a 100644 --- a/lldb/source/Commands/CommandCompletions.cpp +++ b/lldb/source/Commands/CommandCompletions.cpp @@ -71,6 +71,8 @@ bool CommandCompletions::InvokeCommonCompletionCallbacks( {eThreadIndexCompletion, CommandCompletions::ThreadIndexes}, {eWatchPointIDCompletion, CommandCompletions::WatchPointIDs}, {eBreakpointNameCompletion, CommandCompletions::BreakpointNames}, + {eProcessIDCompletion, CommandCompletions::ProcessIDs}, + {eProcessNameCompletion, CommandCompletions::ProcessNames}, {eNoCompletion, nullptr} // This one has to be last in the list. }; @@ -649,6 +651,33 @@ void CommandCompletions::DisassemblyFlavors(CommandInterpreter &interpreter, } } +void CommandCompletions::ProcessIDs(CommandInterpreter &interpreter, + CompletionRequest &request, + SearchFilter *searcher) { + lldb::PlatformSP platform_sp(interpreter.GetPlatform(true)); + if (!platform_sp) + return; + ProcessInstanceInfoList process_infos; + ProcessInstanceInfoMatch match_info; + platform_sp->FindProcesses(match_info, process_infos); + for (const ProcessInstanceInfo &info : process_infos) + request.TryCompleteCurrentArg(std::to_string(info.GetProcessID()), + info.GetNameAsStringRef()); +} + +void CommandCompletions::ProcessNames(CommandInterpreter &interpreter, + CompletionRequest &request, + SearchFilter *searcher) { + lldb::PlatformSP platform_sp(interpreter.GetPlatform(true)); + if (!platform_sp) + return; + ProcessInstanceInfoList process_infos; + ProcessInstanceInfoMatch match_info; + platform_sp->FindProcesses(match_info, process_infos); + for (const ProcessInstanceInfo &info : process_infos) + request.TryCompleteCurrentArg(info.GetNameAsStringRef()); +} + void CommandCompletions::TypeLanguages(CommandInterpreter &interpreter, CompletionRequest &request, SearchFilter *searcher) { |