docs: def run(args):
      """
      Banana banana
      """
  
      parser = argparse.ArgumentParser(
          formatter_class=argparse.RawDescriptionHelpFormatter,
          add_help=False)
      parser.add_argument("--extra-extension-path", action="append",
                          default=[],
                          dest="extra_extension_path",
                          help="An extra extension path to use")
      parser.add_argument('--conf-file', help='Path to the config file',
                          dest='conf_file')
      tmpargs, _args = parser.parse_known_args(args)
  
      json_conf = None
      if tmpargs.conf_file:
          json_conf = load_config_json(tmpargs.conf_file)
          tmpargs.extra_extension_path += json_conf.get('extra_extension_path',
                                                        [])
  
      # We only get these once, doing this now means all
      # installed extensions will show up as Configurable subclasses.
      try:
          ext_classes = get_extension_classes(
              sort=True, extra_extension_paths=tmpargs.extra_extension_path)
      except HotdocException:
          return 1
  
      parser.add_argument('command', action="store",
                          choices=('run', 'conf', 'init', 'help'),
                          nargs="?")
      parser.add_argument('--output-conf-file',
                          help='Path where to save the updated conf'
                          ' file',
                          dest='output_conf_file')
      parser.add_argument('--init-dir',
                          help='Directory to initialize',
                          dest='init_dir')
      parser.add_argument('--version', help="Print version and exit",
                          action="store_true")
      parser.add_argument('--makefile-path',
                          help="Print path to includable "
                          "Makefile and exit",
                          action="store_true")
      parser.add_argument("--get-conf-key", action="store",
                          help="print the value for a configuration "
                          "key")
      parser.add_argument("--get-conf-path", action="store",
                          help="print the value for a configuration "
                          "path")
      parser.add_argument("--get-private-folder", action="store_true",
                          help="get the path to hotdoc's private "
                          "folder")
      parser.add_argument("--has-extension", action="append",
                          dest="has_extensions", default=[],
                          help="Check if a given extension is available")
      parser.add_argument("--list-extensions", action="store_true",
                          dest="list_extensions", help="Print "
                          "available extensions")
      parser.add_argument("-", action="store_true",
                          help="Separator to allow finishing a list"
                          " of arguments before a command",
                          dest="whatever")
  
      add_args_methods = set()
  
      for klass in all_subclasses(Configurable):
          if klass.add_arguments not in add_args_methods:
              klass.add_arguments(parser)
              add_args_methods.add(klass.add_arguments)
  
      known_args, _ = parser.parse_known_args(args)
  
      defaults = {}
      actual_args = {}
      for key, value in list(dict(vars(known_args)).items()):
          if value != parser.get_default(key):
              actual_args[key] = value
          if parser.get_default(key) is not None:
              defaults[key] = value
  
      if known_args.has_extensions:
          res = 0
          for extension_name in known_args.has_extensions:
              found = False
              for klass in ext_classes:
                  if klass.extension_name == extension_name:
                      found = True
                      print("Extension '%s'... FOUND." % extension_name)
              if not found:
                  print("Extension '%s'... NOT FOUND." % extension_name)
                  res = 1
          return res
  
      if known_args.list_extensions:
          print("Extensions:")
          extensions = [e.extension_name for e in ext_classes]
          for extension in sorted(extensions):
              print(" - %s " % extension)
          return 0
  
      if known_args.command != 'init':
          conf_file = actual_args.get('conf_file')
          if conf_file is None and os.path.exists('hotdoc.json'):
              conf_file = 'hotdoc.json'
      else:
          conf_file = ''
  
      config = Config(command_line_args=actual_args,
                      conf_file=conf_file,
                      defaults=defaults,
                      json_conf=json_conf)
  
      Logger.parse_config(config)
  
      return execute_command(parser, config, ext_classes)