gdb
authorTom Tromey <tromey@redhat.com>
Fri, 11 Jul 2008 15:07:52 +0000 (15:07 +0000)
committerTom Tromey <tromey@redhat.com>
Fri, 11 Jul 2008 15:07:52 +0000 (15:07 +0000)
* 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.

gdb/ChangeLog
gdb/completer.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/completion.exp

index 7c9c3ed..e5c54e6 100644 (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
index 62f0b69..e7ee817 100644 (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.  */
-
-char **
-complete_line (const char *text, char *line_buffer, int point)
+   should pretend that the line ends at 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
index 8510e3f..16d4665 100644 (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+.
index f4ab1b1..4100db3 100644 (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  {