gdb: don't show deprecated aliases
authorSimon Marchi <simon.marchi@polymtl.ca>
Mon, 1 Nov 2021 04:30:25 +0000 (00:30 -0400)
committerSimon Marchi <simon.marchi@polymtl.ca>
Sat, 4 Dec 2021 14:06:23 +0000 (09:06 -0500)
I don't think it's very useful to show deprecated aliases to the
user.  It encourages the user to use them, when the goal is the
opposite.

For example, before:

    (gdb) help set index-cache enabled
    set index-cache enabled, set index-cache off, set index-cache on
      alias set index-cache off = set index-cache enabled off
      alias set index-cache on = set index-cache enabled on
    Enable the index cache.
    When on, enable the use of the index cache.

    (gdb) help set index-cache on
    Warning: 'set index-cache on', an alias for the command 'set index-cache enabled', is deprecated.
    Use 'set index-cache enabled on'.

    set index-cache enabled, set index-cache off, set index-cache on
      alias set index-cache off = set index-cache enabled off
      alias set index-cache on = set index-cache enabled on
    Enable the index cache.
    When on, enable the use of the index cache.

After:

    (gdb) help set index-cache enabled
    Enable the index cache.
    When on, enable the use of the index cache.
    (gdb) help set index-cache on
    Warning: 'set index-cache on', an alias for the command 'set index-cache enabled', is deprecated.
    Use 'set index-cache enabled on'.

    Enable the index cache.
    When on, enable the use of the index cache.

Change-Id: I989b618a5ad96ba975367e9d16db95523cd57a4c

gdb/cli/cli-decode.c
gdb/testsuite/gdb.base/commands.exp

index b8be3f54921f5be602b9f3e31c5b12c6acb0c637..9b965ea9989194b5e1ca19e6040eb90e9a8dcb3c 100644 (file)
@@ -1345,7 +1345,7 @@ fput_aliases_definition_styled (const cmd_list_element &cmd,
                                struct ui_file *stream)
 {
   for (const cmd_list_element &alias : cmd.aliases)
-    if (!alias.default_args.empty ())
+    if (!alias.cmd_deprecated && !alias.default_args.empty ())
       fput_alias_definition_styled (alias, stream);
 }
 
@@ -1361,17 +1361,40 @@ fput_command_names_styled (const cmd_list_element &c,
                           bool always_fput_c_name, const char *postfix,
                           struct ui_file *stream)
 {
-  if (always_fput_c_name || !c.aliases.empty ())
+  /* First, check if we are going to print something.  That is, either if
+     ALWAYS_FPUT_C_NAME is true or if there exists at least one non-deprecated
+     alias.  */
+
+  auto print_alias = [] (const cmd_list_element &alias)
+    {
+      return !alias.cmd_deprecated;
+    };
+
+  bool print_something = always_fput_c_name;
+  if (!print_something)
+    for (const cmd_list_element &alias : c.aliases)
+      {
+       if (!print_alias (alias))
+         continue;
+
+       print_something = true;
+       break;
+      }
+
+  if (print_something)
     fput_command_name_styled (c, stream);
 
   for (const cmd_list_element &alias : c.aliases)
     {
+      if (!print_alias (alias))
+       continue;
+
       fputs_filtered (", ", stream);
       wrap_here ("   ");
       fput_command_name_styled (alias, stream);
     }
 
-  if (always_fput_c_name || !c.aliases.empty ())
+  if (print_something)
     fputs_filtered (postfix, stream);
 }
 
index 6785f9532b11389442eaee6c20f0f6f3908f66fb..1dca419f0fb7c311be86f4730383beb1df4a8ae3 100644 (file)
@@ -709,6 +709,27 @@ maintenance deprecate set qqq_aaa"
     file delete $file1
 }
 
+# Test that the help for a command does not show deprecated aliases.
+
+proc_with_prefix deprecated_command_alias_help_test {} {
+    gdb_test_multiline "define real_command" \
+       "define real_command" "End with a line saying just \"end\".." \
+       "print 1" "" \
+       "end" ""
+
+    gdb_test_no_output "alias alias_command = real_command"
+    gdb_test_no_output "alias alias_with_args_command = real_command 123"
+
+    gdb_test "help real_command" \
+       "real_command, alias_with_args_command, alias_command\r\n  alias alias_with_args_command = real_command 123\r\nUser-defined." \
+       "help real_command, before"
+    gdb_test_no_output "maintenance deprecate alias_command"
+    gdb_test_no_output "maintenance deprecate alias_with_args_command"
+    gdb_test "help real_command" \
+       "User-defined." \
+       "help real_command, after"
+}
+
 proc_with_prefix bp_deleted_in_command_test {} {
     global gdb_prompt
 
@@ -1203,6 +1224,7 @@ user_defined_command_manyargs_test
 watchpoint_command_test
 test_command_prompt_position
 deprecated_command_test
+deprecated_command_alias_help_test
 bp_deleted_in_command_test
 temporary_breakpoint_commands
 stray_arg0_test