Skip to content

Commit

Permalink
gdb: Add command completers for some info commands
Browse files Browse the repository at this point in the history
Add command completion for info variables, functions, args, and
locals.  This completer only completes the command line options as
these commands all take a regexp which GDB can't really offer
completions for.

gdb/ChangeLog:

	* cli/cli-utils.c (info_print_command_completer): New function.
	* cli/cli-utils.h: Add 'completer.h' include, and forward
	declaration for 'struct cmd_list_element'.
	(info_print_command_completer): Declare.
	* stack.c (_initialize_stack): Add completer for 'info locals' and
	'info args'.
	* symtab.c (_initialize_symtab): Add completer for 'info
	variables' and 'info functions'.
	* NEWS: Mention completion for additional info commands.
  • Loading branch information
T-J-Teru committed Jul 11, 2019
1 parent b16507e commit 60cfcb2
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 11 deletions.
12 changes: 12 additions & 0 deletions gdb/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
2019-07-11 Andrew Burgess <[email protected]>

* cli/cli-utils.c (info_print_command_completer): New function.
* cli/cli-utils.h: Add 'completer.h' include, and forward
declaration for 'struct cmd_list_element'.
(info_print_command_completer): Declare.
* stack.c (_initialize_stack): Add completer for 'info locals' and
'info args'.
* symtab.c (_initialize_symtab): Add completer for 'info
variables' and 'info functions'.
* NEWS: Mention completion for additional info commands.

2019-07-11 Andrew Burgess <[email protected]>

* cli/cli-utils.c (extract_info_print_args): Delete.
Expand Down
4 changes: 3 additions & 1 deletion gdb/NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,9 @@ maint show test-options-completion-result
"taas" commands, and their "-ascending" option can now be
abbreviated.

** GDB can now complete the options of the "info threads" command.
** GDB can now complete the options of the "info threads", "info
functions", "info variables", "info locals", and "info args"
commands.

** GDB can now complete the options of the "compile file" and
"compile code" commands. The "compile file" command now
Expand Down
17 changes: 17 additions & 0 deletions gdb/cli/cli-utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -473,3 +473,20 @@ extract_info_print_options (info_print_options *opts,
if (*args != nullptr && **args == '\0')
*args = nullptr;
}

/* See documentation in cli-utils.h. */

void
info_print_command_completer (struct cmd_list_element *ignore,
completion_tracker &tracker,
const char *text, const char * /* word */)
{
const auto group
= make_info_print_options_def_group (nullptr);
if (gdb::option::complete_options
(tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
return;

const char *word = advance_to_expression_complete_word_point (tracker, text);
symbol_completer (ignore, tracker, text, word);
}
13 changes: 13 additions & 0 deletions gdb/cli/cli-utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@
#ifndef CLI_CLI_UTILS_H
#define CLI_CLI_UTILS_H

#include "completer.h"

struct cmd_list_element;

/* *PP is a string denoting a number. Get the number. Advance *PP
after the string and any trailing whitespace.
Expand Down Expand Up @@ -66,6 +70,15 @@ struct info_print_options
extern void extract_info_print_options (info_print_options *opts,
const char **args);

/* Function that can be used as a command completer for 'info variable'
and friends. This offers command option completion as well as symbol
completion. At the moment all symbols are offered for all commands. */

extern void info_print_command_completer (struct cmd_list_element *ignore,
completion_tracker &tracker,
const char *text,
const char * /* word */);

/* Throws an error telling the user that ARGS starts with an option
unrecognized by COMMAND. */

Expand Down
10 changes: 6 additions & 4 deletions gdb/stack.c
Original file line number Diff line number Diff line change
Expand Up @@ -3423,18 +3423,20 @@ Print information about a stack frame selected by level.\n\
Usage: info frame level LEVEL"),
&info_frame_cmd_list);

add_info ("locals", info_locals_command,
info_print_args_help (_("\
cmd = add_info ("locals", info_locals_command,
info_print_args_help (_("\
All local variables of current stack frame or those matching REGEXPs.\n\
Usage: info locals [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
Prints the local variables of the current stack frame.\n"),
_("local variables")));
add_info ("args", info_args_command,
info_print_args_help (_("\
set_cmd_completer_handle_brkchars (cmd, info_print_command_completer);
cmd = add_info ("args", info_args_command,
info_print_args_help (_("\
All argument variables of current stack frame or those matching REGEXPs.\n\
Usage: info args [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
Prints the argument variables of the current stack frame.\n"),
_("argument variables")));
set_cmd_completer_handle_brkchars (cmd, info_print_command_completer);

if (dbx_commands)
add_com ("func", class_stack, func_command, _("\
Expand Down
19 changes: 13 additions & 6 deletions gdb/symtab.c
Original file line number Diff line number Diff line change
Expand Up @@ -5997,28 +5997,35 @@ symbol_set_symtab (struct symbol *symbol, struct symtab *symtab)
void
_initialize_symtab (void)
{
cmd_list_element *c;

initialize_ordinary_address_classes ();

add_info ("variables", info_variables_command,
info_print_args_help (_("\
c = add_info ("variables", info_variables_command,
info_print_args_help (_("\
All global and static variable names or those matching REGEXPs.\n\
Usage: info variables [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
Prints the global and static variables.\n"),
_("global and static variables")));
set_cmd_completer_handle_brkchars (c, info_print_command_completer);
if (dbx_commands)
add_com ("whereis", class_info, info_variables_command,
info_print_args_help (_("\
{
c = add_com ("whereis", class_info, info_variables_command,
info_print_args_help (_("\
All global and static variable names, or those matching REGEXPs.\n\
Usage: whereis [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
Prints the global and static variables.\n"),
_("global and static variables")));
set_cmd_completer_handle_brkchars (c, info_print_command_completer);
}

add_info ("functions", info_functions_command,
info_print_args_help (_("\
c = add_info ("functions", info_functions_command,
info_print_args_help (_("\
All function names or those matching REGEXPs.\n\
Usage: info functions [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
Prints the functions.\n"),
_("functions")));
set_cmd_completer_handle_brkchars (c, info_print_command_completer);

/* FIXME: This command has at least the following problems:
1. It prints builtin types (in a very strange and confusing fashion).
Expand Down

0 comments on commit 60cfcb2

Please sign in to comment.