* 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> 2008-07-11 Pedro Alves <pedro@codesourcery.com>
* thread.c (thread_apply_command): Move making the cleanup out of * 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); 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 /* 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. 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 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 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 ** FOR_HELP is true when completing a 'help' command. In this case,
complete_line (const char *text, char *line_buffer, int point) 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 **list = NULL;
char *tmp_command, *p; char *tmp_command, *p;
@ -583,6 +581,8 @@ complete_line (const char *text, char *line_buffer, int point)
rl_completer_word_break_characters = rl_completer_word_break_characters =
gdb_completer_command_word_break_characters; gdb_completer_command_word_break_characters;
} }
else if (for_help)
list = NULL;
else if (c->enums) else if (c->enums)
{ {
list = complete_on_enum (c->enums, p, word); 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; gdb_completer_command_word_break_characters;
} }
} }
else if (for_help)
list = NULL;
else else
{ {
/* There is non-whitespace beyond the command. */ /* There is non-whitespace beyond the command. */
@ -695,6 +697,21 @@ complete_line (const char *text, char *line_buffer, int point)
return list; 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 /* Generate completions one by one for the completer. Each time we are
called return another potential completion to the caller. called return another potential completion to the caller.
line_completion just completes on commands or passes the buck to the 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> 2008-07-10 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.base/randomize.exp: Remove dependency on tcl-8.4+. * 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" send_gdb "p \"break1\t"
sleep 1 sleep 1
gdb_expect { gdb_expect {