mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-23 17:48:03 +00:00
Adding two new options to the 'help' command:
--show-aliases (-a) shows aliases for commands, as well as built-in commands --hide-user-defined (-u) hides user defined commands by default 'help' without arguments does not show aliases anymore. to see them, add --show-aliases to have only built-in commands appear, use 'help --hide-user-defined' ; there is currently no way to hide built-in commands from the help output 'help command' is not changed by this commit, and help is shown even if command is an alias and -a is not specified llvm-svn: 139377
This commit is contained in:
parent
8a8ce4ad2f
commit
08633eea20
@ -259,7 +259,7 @@ public:
|
||||
|
||||
void
|
||||
GetHelp (CommandReturnObject &result,
|
||||
CommandTypes types = eCommandTypesAllThem);
|
||||
uint32_t types = eCommandTypesAllThem);
|
||||
|
||||
void
|
||||
GetAliasHelp (const char *alias_name,
|
||||
|
@ -29,7 +29,7 @@ CommandObjectHelp::CommandObjectHelp (CommandInterpreter &interpreter) :
|
||||
CommandObject (interpreter,
|
||||
"help",
|
||||
"Show a list of all debugger commands, or give details about specific commands.",
|
||||
"help [<cmd-name>]")
|
||||
"help [<cmd-name>]"), m_options (interpreter)
|
||||
{
|
||||
CommandArgumentEntry arg;
|
||||
CommandArgumentData command_arg;
|
||||
@ -49,6 +49,14 @@ CommandObjectHelp::~CommandObjectHelp()
|
||||
{
|
||||
}
|
||||
|
||||
OptionDefinition
|
||||
CommandObjectHelp::CommandOptions::g_option_table[] =
|
||||
{
|
||||
{ LLDB_OPT_SET_ALL, false, "show-aliases", 'a', no_argument, NULL, 0, eArgTypeNone, "Show aliases in the command list."},
|
||||
{ LLDB_OPT_SET_ALL, false, "hide-user-commands", 'u', no_argument, NULL, 0, eArgTypeNone, "Hide user-defined commands from the list."},
|
||||
{ 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL }
|
||||
};
|
||||
|
||||
bool
|
||||
CommandObjectHelp::Execute (Args& command, CommandReturnObject &result)
|
||||
{
|
||||
@ -56,12 +64,18 @@ CommandObjectHelp::Execute (Args& command, CommandReturnObject &result)
|
||||
CommandObject *cmd_obj;
|
||||
const int argc = command.GetArgumentCount ();
|
||||
|
||||
// 'help' doesn't take any options or arguments, other than command names. If argc is 0, we show the user
|
||||
// all commands and aliases. Otherwise every argument must be the name of a command or a sub-command.
|
||||
// 'help' doesn't take any arguments, other than command names. If argc is 0, we show the user
|
||||
// all commands (aliases and user commands if asked for). Otherwise every argument must be the name of a command or a sub-command.
|
||||
if (argc == 0)
|
||||
{
|
||||
uint32_t cmd_types = CommandInterpreter::eCommandTypesBuiltin;
|
||||
if (m_options.m_show_aliases)
|
||||
cmd_types |= CommandInterpreter::eCommandTypesAliases;
|
||||
if (m_options.m_show_user_defined)
|
||||
cmd_types |= CommandInterpreter::eCommandTypesUserDef;
|
||||
|
||||
result.SetStatus (eReturnStatusSuccessFinishNoResult);
|
||||
m_interpreter.GetHelp (result); // General help, for ALL commands.
|
||||
m_interpreter.GetHelp (result, cmd_types); // General help
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -15,6 +15,7 @@
|
||||
// Other libraries and framework includes
|
||||
// Project includes
|
||||
#include "lldb/Interpreter/CommandObject.h"
|
||||
#include "lldb/Interpreter/Options.h"
|
||||
|
||||
namespace lldb_private {
|
||||
|
||||
@ -43,6 +44,71 @@ public:
|
||||
int max_return_elements,
|
||||
bool &word_complete,
|
||||
StringList &matches);
|
||||
|
||||
class CommandOptions : public Options
|
||||
{
|
||||
public:
|
||||
|
||||
CommandOptions (CommandInterpreter &interpreter) :
|
||||
Options (interpreter)
|
||||
{
|
||||
}
|
||||
|
||||
virtual
|
||||
~CommandOptions (){}
|
||||
|
||||
virtual Error
|
||||
SetOptionValue (uint32_t option_idx, const char *option_arg)
|
||||
{
|
||||
Error error;
|
||||
char short_option = (char) m_getopt_table[option_idx].val;
|
||||
|
||||
switch (short_option)
|
||||
{
|
||||
case 'a':
|
||||
m_show_aliases = true;
|
||||
break;
|
||||
case 'u':
|
||||
m_show_user_defined = false;
|
||||
break;
|
||||
default:
|
||||
error.SetErrorStringWithFormat ("Unrecognized option '%c'.\n", short_option);
|
||||
break;
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
void
|
||||
OptionParsingStarting ()
|
||||
{
|
||||
m_show_aliases = false;
|
||||
m_show_user_defined = true;
|
||||
}
|
||||
|
||||
const OptionDefinition*
|
||||
GetDefinitions ()
|
||||
{
|
||||
return g_option_table;
|
||||
}
|
||||
|
||||
// Options table: Required for subclasses of Options.
|
||||
|
||||
static OptionDefinition g_option_table[];
|
||||
|
||||
// Instance variables to hold the values for command options.
|
||||
|
||||
bool m_show_aliases;
|
||||
bool m_show_user_defined;
|
||||
};
|
||||
|
||||
CommandOptions m_options;
|
||||
|
||||
virtual Options *
|
||||
GetOptions ()
|
||||
{
|
||||
return &m_options;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
@ -701,7 +701,7 @@ CommandInterpreter::FindLongestCommandWord (CommandObject::CommandMap &dict)
|
||||
|
||||
void
|
||||
CommandInterpreter::GetHelp (CommandReturnObject &result,
|
||||
CommandTypes cmd_types)
|
||||
uint32_t cmd_types)
|
||||
{
|
||||
CommandObject::CommandMap::const_iterator pos;
|
||||
uint32_t max_len = FindLongestCommandWord (m_command_dict);
|
||||
|
@ -90,6 +90,14 @@ class AliasTestCase(TestBase):
|
||||
self.expect ("help run",
|
||||
substrs = [ "'run' is an abbreviation for 'process launch --'" ])
|
||||
|
||||
self.expect ("help -a run",
|
||||
substrs = [ "'run' is an abbreviation for 'process launch --'" ])
|
||||
|
||||
self.expect ("help -a",
|
||||
substrs = [ 'run', 'process launch' ])
|
||||
|
||||
self.expect ("help", matching=False,
|
||||
substrs = [ "'run'", 'process launch' ])
|
||||
|
||||
self.expect ("run",
|
||||
patterns = [ "Process .* launched: .*a.out" ])
|
||||
|
@ -38,6 +38,18 @@ class CmdPythonTestCase(TestBase):
|
||||
substrs = ['Just a docstring for welcome_impl',
|
||||
'A command that says hello to LLDB users'])
|
||||
|
||||
self.expect("help",
|
||||
substrs = ['Run Python function welcome.welcome_impl',
|
||||
'welcome'])
|
||||
|
||||
self.expect("help -a",
|
||||
substrs = ['Run Python function welcome.welcome_impl',
|
||||
'welcome'])
|
||||
|
||||
self.expect("help -u", matching=False,
|
||||
substrs = ['Run Python function welcome.welcome_impl',
|
||||
'welcome'])
|
||||
|
||||
self.runCmd("command script delete welcome");
|
||||
|
||||
self.expect('welcome Enrico', matching=False, error=True,
|
||||
|
@ -18,6 +18,18 @@ class HelpCommandTestCase(TestBase):
|
||||
self.expect("help",
|
||||
startstr = 'The following is a list of built-in, permanent debugger commands')
|
||||
|
||||
self.expect("help", matching=False,
|
||||
substrs = ['next'])
|
||||
|
||||
self.expect("help -a", matching=True,
|
||||
substrs = ['next'])
|
||||
|
||||
def test_help_on_help(self):
|
||||
"""Testing the help on the help facility."""
|
||||
self.expect("help help", matching=True,
|
||||
substrs = ['--show-aliases',
|
||||
'--hide-user-commands'])
|
||||
|
||||
def version_number_string(self):
|
||||
"""Helper function to find the version number string of lldb."""
|
||||
plist = os.path.join(os.environ["LLDB_SRC"], "resources", "LLDB-Info.plist")
|
||||
|
Loading…
x
Reference in New Issue
Block a user