================
@@ -305,6 +305,42 @@ void CommandObject::HandleCompletion(CompletionRequest
&request) {
}
}
+void
+CommandObject::HandleArgumentCompletion(CompletionRequest &request,
+ OptionElementVector &opt_element_vector) {
+ size_t num_arg_entries = GetNumArgumentEntries();
+ if (num_arg_entries != 1)
+ return;
+
+ CommandArgumentEntry *entry_ptr = GetArgumentEntryAtIndex(0);
+ if (!entry_ptr)
+ return; // Maybe this should be an assert, this shouldn't be possible.
+
+ CommandArgumentEntry &entry = *entry_ptr;
+ // For now, we only handle the simple case of one homogenous argument type.
+ if (entry.size() != 1)
+ return;
+
+ // Look up the completion type, and if it has one, invoke it:
+ const CommandObject::ArgumentTableEntry *arg_entry
+ = FindArgumentDataByType(entry[0].arg_type);
+ const ArgumentRepetitionType repeat = entry[0].arg_repetition;
+
+ if (arg_entry == nullptr || arg_entry->completion_type ==
lldb::eNoCompletion)
+ return;
+
+ // FIXME: This should be handled higher in the Command Parser.
+ // Check the case where this command only takes one argument, and don't do
+ // the completion if we aren't on the first entry:
+ if (repeat == eArgRepeatPlain && request.GetCursorIndex() != 0)
+ return;
+
+ lldb_private::CommandCompletions::InvokeCommonCompletionCallbacks(
+ GetCommandInterpreter(), arg_entry->completion_type, request,
nullptr);
+
----------------
clayborg wrote:
If we can handle `N` completion types, this code could be put into a function
and run multiple times with a different index, or we can just make a loop
https://github.com/llvm/llvm-project/pull/82085
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits