[Lldb-commits] [PATCH] Add help flag to 'command script add'
Ari Grant
ari.grant at me.com
Tue Dec 31 15:49:06 PST 2013
Currently the help command in LLDB will print the __doc__ string for any python commands a user has added. However, when help is called without any arguments all commands are listed and the help shown for python commands is unhelpful. The message is a vague description the includes no more than the function name the command calls into.
This adds a help flag to specify a one line, brief help string for use in this case. Now a person can invoke:
(lldb) command script add -f somePyModule.somePyFunc -h "A quick hint about what this is."
and then calling 'help' will show the help string for the user added commands.
http://llvm-reviews.chandlerc.com/D2495
Files:
include/lldb/lldb-enumerations.h
source/Commands/CommandObjectCommands.cpp
source/Interpreter/CommandObject.cpp
Index: include/lldb/lldb-enumerations.h
===================================================================
--- include/lldb/lldb-enumerations.h
+++ include/lldb/lldb-enumerations.h
@@ -394,6 +394,7 @@
eArgTypeFunctionName,
eArgTypeFunctionOrSymbol,
eArgTypeGDBFormat,
+ eArgTypeHelpString,
eArgTypeIndex,
eArgTypeLanguage,
eArgTypeLineNum,
Index: source/Commands/CommandObjectCommands.cpp
===================================================================
--- source/Commands/CommandObjectCommands.cpp
+++ source/Commands/CommandObjectCommands.cpp
@@ -1261,10 +1261,11 @@
CommandObjectPythonFunction (CommandInterpreter &interpreter,
std::string name,
std::string funct,
+ std::string help,
ScriptedCommandSynchronicity synch) :
CommandObjectRaw (interpreter,
name.c_str(),
- (std::string("Run Python function ") + funct).c_str(),
+ (help == "" ? (std::string("Run Python function ") + funct) : help).c_str(),
NULL),
m_function_name(funct),
m_synchro(synch),
@@ -1537,7 +1538,10 @@
m_options (interpreter)
{
CommandArgumentEntry arg1;
+ CommandArgumentEntry arg2;
+
CommandArgumentData cmd_arg;
+ CommandArgumentData help_arg;
// Define the first (and only) variant of this arg.
cmd_arg.arg_type = eArgTypeCommandName;
@@ -1545,9 +1549,17 @@
// There is only one variant this argument could be; put it into the argument entry.
arg1.push_back (cmd_arg);
-
- // Push the data for the first argument into the m_arguments vector.
+
+ // Define the first (and only) variant of this arg.
+ help_arg.arg_type = eArgTypeHelpString;
+ help_arg.arg_repetition = eArgRepeatPlain;
+
+ // There is only one variant this argument could be; put it into the argument entry.
+ arg2.push_back (help_arg);
+
+ // Push the data for the second argument into the m_arguments vector.
m_arguments.push_back (arg1);
+ m_arguments.push_back (arg2);
}
~CommandObjectCommandsScriptAdd ()
@@ -1585,6 +1597,9 @@
case 'f':
m_funct_name = std::string(option_arg);
break;
+ case 'h':
+ m_help_string = std::string(option_arg);
+ break;
case 's':
m_synchronous = (ScriptedCommandSynchronicity) Args::StringToOptionEnum(option_arg, g_option_table[option_idx].enum_values, 0, error);
if (!error.Success())
@@ -1602,6 +1617,7 @@
OptionParsingStarting ()
{
m_funct_name = "";
+ m_help_string = "";
m_synchronous = eScriptedCommandSynchronicitySynchronous;
}
@@ -1618,6 +1634,7 @@
// Instance variables to hold the values for command options.
std::string m_funct_name;
+ std::string m_help_string;
ScriptedCommandSynchronicity m_synchronous;
};
@@ -1729,6 +1746,7 @@
CommandObjectSP command_obj_sp(new CommandObjectPythonFunction(m_interpreter,
m_cmd_name,
funct_name_str.c_str(),
+ "",
m_synchronous));
if (!m_interpreter.AddUserCommand(m_cmd_name, command_obj_sp, true))
@@ -1798,6 +1816,7 @@
CommandObjectSP new_cmd(new CommandObjectPythonFunction(m_interpreter,
cmd_name,
m_options.m_funct_name,
+ m_options.m_help_string,
m_options.m_synchronous));
if (m_interpreter.AddUserCommand(cmd_name, new_cmd, true))
{
@@ -1829,6 +1848,7 @@
CommandObjectCommandsScriptAdd::CommandOptions::g_option_table[] =
{
{ LLDB_OPT_SET_1, false, "function", 'f', OptionParser::eRequiredArgument, NULL, 0, eArgTypePythonFunction, "Name of the Python function to bind to this command name."},
+ { LLDB_OPT_SET_1, false, "help", 'h', OptionParser::eRequiredArgument, NULL, 0, eArgTypeHelpString, "A string that briefly describes the command."},
{ LLDB_OPT_SET_1, false, "synchronicity", 's', OptionParser::eRequiredArgument, g_script_synchro_type, 0, eArgTypeScriptedCommandSynchronicity, "Set the synchronicity of this command's executions with regard to LLDB event system."},
{ 0, false, NULL, 0, 0, NULL, 0, eArgTypeNone, NULL }
};
Index: source/Interpreter/CommandObject.cpp
===================================================================
--- source/Interpreter/CommandObject.cpp
+++ source/Interpreter/CommandObject.cpp
@@ -1110,6 +1110,7 @@
{ eArgTypeFunctionName, "function-name", CommandCompletions::eNoCompletion, { NULL, false }, "The name of a function." },
{ eArgTypeFunctionOrSymbol, "function-or-symbol", CommandCompletions::eNoCompletion, { NULL, false }, "The name of a function or symbol." },
{ eArgTypeGDBFormat, "gdb-format", CommandCompletions::eNoCompletion, { GDBFormatHelpTextCallback, true }, NULL },
+ { eArgTypeHelpString, "help-string", CommandCompletions::eNoCompletion, { NULL, false }, "A brief help string summarizing a function or symbol." },
{ eArgTypeIndex, "index", CommandCompletions::eNoCompletion, { NULL, false }, "An index into a list." },
{ eArgTypeLanguage, "language", CommandCompletions::eNoCompletion, { LanguageTypeHelpTextCallback, true }, NULL },
{ eArgTypeLineNum, "linenum", CommandCompletions::eNoCompletion, { NULL, false }, "Line number in a source file." },
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D2495.1.patch
Type: text/x-patch
Size: 6309 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20131231/db5380e6/attachment.bin>
More information about the lldb-commits
mailing list