MI: extract command completion logic from complete_command()

Extract completion logic from CLI complete_command() into a new
helper function complete().

gdb/Changelog:

	* completer.h (complete): New function.
	* completer.c (complete): Likewise.
	* cli/cli-cmds.c: (complete_command): Update to use new complete()
	function defined in completer.h.
This commit is contained in:
Jan Vrany
2019-05-17 10:58:23 +01:00
parent 7d0e2ecede
commit 6e035501e1
4 changed files with 50 additions and 28 deletions

View File

@ -1613,6 +1613,41 @@ make_completion_match_str (gdb::unique_xmalloc_ptr<char> &&match_name,
return gdb::unique_xmalloc_ptr<char> (newobj);
}
/* See complete.h. */
completion_result
complete (const char *line, char const **word, int *quote_char)
{
completion_tracker tracker_handle_brkchars;
completion_tracker tracker_handle_completions;
completion_tracker *tracker;
try
{
*word = completion_find_completion_word (tracker_handle_brkchars,
line, quote_char);
/* Completers that provide a custom word point in the
handle_brkchars phase also compute their completions then.
Completers that leave the completion word handling to readline
must be called twice. */
if (tracker_handle_brkchars.use_custom_word_point ())
tracker = &tracker_handle_brkchars;
else
{
complete_line (tracker_handle_completions, *word, line, strlen (line));
tracker = &tracker_handle_completions;
}
}
catch (const gdb_exception &ex)
{
return {};
}
return tracker->build_completion_result (*word, *word - line, strlen (line));
}
/* Generate completions all at once. Does nothing if max_completions
is 0. If max_completions is non-negative, this will collect at
most max_completions strings.