docs: def build_command_tree(pattern, cmd_params):
      """
      Recursively fill in a command tree in cmd_params according to a docopt-parsed "pattern" object.
      """
      from docopt import Either, Optional, OneOrMore, Required, Option, Command, Argument
      if type(pattern) in [Either, Optional, OneOrMore]:
          for child in pattern.children:
              build_command_tree(child, cmd_params)
      elif type(pattern) in [Required]:
          for child in pattern.children:
              cmd_params = build_command_tree(child, cmd_params)
      elif type(pattern) in [Option]:
          suffix = "=" if pattern.argcount else ""
          if pattern.short:
              cmd_params.options.append(pattern.short + suffix)
          if pattern.long:
              cmd_params.options.append(pattern.long + suffix)
      elif type(pattern) in [Command]:
          cmd_params = cmd_params.get_subcommand(pattern.name)
      elif type(pattern) in [Argument]:
          cmd_params.arguments.append(pattern.name)
      return cmd_params