[commands] Add Command.signature

This replaces HelpFormatter.get_command_signature for the most part.
This commit is contained in:
Rapptz
2017-03-21 00:45:52 -04:00
parent 54fdafb792
commit 3087600c8d
2 changed files with 40 additions and 31 deletions

View File

@@ -544,6 +544,45 @@ class Command:
return self.help.split('\n', 1)[0]
return ''
@property
def signature(self):
"""Returns a POSIX-like signature useful for help command output."""
result = []
parent = self.full_parent_name
if len(self.aliases) > 0:
aliases = '|'.join(self.aliases)
fmt = '[%s|%s]' % (self.name, aliases)
if parent:
fmt = parent + fmt
result.append(fmt)
else:
name = self.name if not parent else parent + ' ' + self.name
result.append(name)
if self.usage:
result.append(self.usage)
return ' '.join(result)
params = self.clean_params
if not params:
return ' '.join(result)
for name, param in params.items():
if param.default is not param.empty:
# We don't want None or '' to trigger the [name=value] case and instead it should
# do [name] since [name=None] or [name=] are not exactly useful for the user.
should_print = param.default if isinstance(param.default, str) else param.default is not None
if should_print:
result.append('[%s=%s]' % (name, param.default))
else:
result.append('[%s]' % name)
elif param.kind == param.VAR_POSITIONAL:
result.append('[%s...]' % name)
else:
result.append('<%s>' % name)
return ' '.join(result)
@asyncio.coroutine
def can_run(self, ctx):
"""|coro|