1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#include "clicommandhelp.h"
#include "clicommandfactory.h"
#include "common/utils.h"
#include "cli_config.h"
void CliCommandHelp::execute()
{
if (syntax.isArgumentSet(CMD_NAME))
printHelp(syntax.getArgument(CMD_NAME));
else
printHelp();
}
QString CliCommandHelp::shortHelp() const
{
return tr("shows this help message");
}
QString CliCommandHelp::fullHelp() const
{
return tr(
"Use %1 to learn about certain commands supported by the command line interface (CLI) of the SQLiteStudio.\n"
"To see list of supported commands, type %2 without any arguments.\n\n"
"When passing <command> name, you can skip special prefix character ('%3').\n\n"
"You can always execute any command with exactly single '--help' option to see help for that command. "
"It's an alternative for typing: %1 <command>."
).arg(cmdName("help"), cmdName("help"), CFG_CLI.Console.CommandPrefixChar.get(), cmdName("help"));
}
void CliCommandHelp::defineSyntax()
{
syntax.setName("help");
syntax.addArgument(CMD_NAME, tr("command", "CLI command syntax"), false);
}
void CliCommandHelp::printHelp(const QString& cmd)
{
QString cmdStr = cmd.startsWith(".") ? cmd.mid(1) : cmd;
CliCommand* command = CliCommandFactory::getCommand(cmdStr);
if (!command)
{
println(tr("No such command: %1").arg(cmd));
println(tr("Type '%1' for list of available commands.").arg(cmdName("help")));
println("");
return;
}
command->defineSyntax();
QStringList aliases = command->aliases();
QString prefix = CFG_CLI.Console.CommandPrefixChar.get();
QString msg;
msg += tr("Usage: %1%2").arg(prefix, command->usage(cmdStr));
msg += "\n";
if (aliases.size() > 0)
{
if (aliases.contains(cmdStr))
{
aliases.removeOne(cmdStr);
aliases << command->getName();
}
msg += tr("Aliases: %1").arg(prefix + aliases.join(", " + prefix));
msg += "\n";
}
msg += "\n";
msg += command->fullHelp();
delete command;
printBox(msg);
}
void CliCommandHelp::printHelp()
{
QHash<QString, CliCommand*> allCommands = CliCommandFactory::getAllCommands();
QStringList names = allCommands.keys();
int width = longest(names).size();
names.sort();
QStringList msgList;
for (const QString& cmd : names)
{
msgList << (CFG_CLI.Console.CommandPrefixChar.get() + pad(cmd, width, ' ') + " - " + allCommands[cmd]->shortHelp());
delete allCommands[cmd];
}
printBox(msgList.join("\n"));
printHelp("help");
}
|