nubia/internal/commands/help.py (52 lines of code) (raw):

#!/usr/bin/env python3 # Copyright (c) Facebook, Inc. and its affiliates. # All rights reserved. # # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. # from prettytable import PrettyTable from termcolor import colored, cprint from nubia.internal import context from nubia.internal.cmdbase import Command from nubia.internal.exceptions import CommandError, UnknownCommand class HelpCommand(Command): HELP = "Prints help about all the commands" cmds = {"help": HELP, "?": HELP} def __init__(self): super(Command, self).__init__() self._built_in = True @property def registry(self): return context.get_context().registry def get_completions(self, cmd, document, complete_event): return self.registry.get_completer().get_completions(document, complete_event) async def run_interactive(self, _0, args, _2): if args: args = args.split() try: cmd_instance = self.registry.find_command(args[0]) if not cmd_instance: raise UnknownCommand(f"Command `{args[0]}` is unknown") else: help_msg = cmd_instance.get_help(args[0].lower(), *args) print(help_msg) except CommandError as e: cprint(str(e), "red") return 1 else: built_ins = PrettyTable(["Command", "Description"]) built_ins.align = "l" t = PrettyTable(["Command", "Description"]) t.align = "l" commands = { cmd_name: cmd for cmd in self.registry.get_all_commands() for cmd_name in cmd.get_command_names() } for cmd_name in sorted(commands): cmd = commands[cmd_name] table = built_ins if cmd.built_in else t cmd_help = cmd.get_help(cmd_name) table.add_row([colored(cmd_name, "magenta"), cmd_help]) print(t) cprint("Built-in Commands", "yellow") print(built_ins) return 0 def get_command_names(self): return self.cmds.keys() def get_help(self, cmd, *args): return self.HELP