* completer.c (complete_line_internal): New function, from
	complete_line.  Add 'for_help' parameter.
	(complete_line): Use it.
	(command_completer): Move later.  Rewrite.
gdb/testsuite
	* gdb.base/completion.exp: Add 'help' completion test.
This commit is contained in:
Tom Tromey 2008-07-11 15:07:52 +00:00
parent 65fc9b7721
commit 14032a66f1
4 changed files with 56 additions and 11 deletions

View File

@ -1,3 +1,10 @@
2008-07-11 Tom Tromey <tromey@redhat.com>
* completer.c (complete_line_internal): New function, from
complete_line. Add 'for_help' parameter.
(complete_line): Use it.
(command_completer): Move later. Rewrite.
2008-07-11 Pedro Alves <pedro@codesourcery.com>
* thread.c (thread_apply_command): Move making the cleanup out of

View File

@ -429,14 +429,6 @@ expression_completer (char *text, char *word)
return location_completer (p, word);
}
/* Complete on command names. Used by "help". */
char **
command_completer (char *text, char *word)
{
return complete_on_cmdlist (cmdlist, text, word);
}
/* Here are some useful test cases for completion. FIXME: These should
be put in the test suite. They should be tested with both M-? and TAB.
@ -467,10 +459,16 @@ command_completer (char *text, char *word)
LINE_BUFFER is available to be looked at; it contains the entire text
of the line. POINT is the offset in that line of the cursor. You
should pretend that the line ends at POINT. */
should pretend that the line ends at POINT.
char **
complete_line (const char *text, char *line_buffer, int point)
FOR_HELP is true when completing a 'help' command. In this case,
once sub-command completions are exhausted, we simply return NULL.
When FOR_HELP is false, we will call a sub-command's completion
function. */
static char **
complete_line_internal (const char *text, char *line_buffer, int point,
int for_help)
{
char **list = NULL;
char *tmp_command, *p;
@ -583,6 +581,8 @@ complete_line (const char *text, char *line_buffer, int point)
rl_completer_word_break_characters =
gdb_completer_command_word_break_characters;
}
else if (for_help)
list = NULL;
else if (c->enums)
{
list = complete_on_enum (c->enums, p, word);
@ -650,6 +650,8 @@ complete_line (const char *text, char *line_buffer, int point)
gdb_completer_command_word_break_characters;
}
}
else if (for_help)
list = NULL;
else
{
/* There is non-whitespace beyond the command. */
@ -695,6 +697,21 @@ complete_line (const char *text, char *line_buffer, int point)
return list;
}
/* Like complete_line_internal, but always passes 0 for FOR_HELP. */
char **
complete_line (const char *text, char *line_buffer, int point)
{
return complete_line_internal (text, line_buffer, point, 0);
}
/* Complete on command names. Used by "help". */
char **
command_completer (char *text, char *word)
{
return complete_line_internal (word, text, strlen (text), 1);
}
/* Generate completions one by one for the completer. Each time we are
called return another potential completion to the caller.
line_completion just completes on commands or passes the buck to the

View File

@ -1,3 +1,7 @@
2008-07-11 Tom Tromey <tromey@redhat.com>
* gdb.base/completion.exp: Add 'help' completion test.
2008-07-10 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.base/randomize.exp: Remove dependency on tcl-8.4+.

View File

@ -364,6 +364,23 @@ gdb_expect {
}
send_gdb "help info wat\t"
gdb_expect {
-re "^help info watchpoints $"\
{ send_gdb "\n"
gdb_expect {
-re "Synonym for .*\r\n.*$gdb_prompt $"\
{ pass "complete help info wat" }
-re ".*$gdb_prompt $" { fail "complete help info wat"}
timeout {fail "(timeout) complete help info wat"}
}
}
-re "^help info wat\\\x07$" { fail "complete (2) help info wat" }
-re ".*$gdb_prompt $" { fail "complete (3) help info wat" }
timeout { fail "(timeout) complete (3) help info wat" }
}
send_gdb "p \"break1\t"
sleep 1
gdb_expect {