code: def add_parser(self, func=None, name=None, **kwargs):
          
          if func:
              if not func.__doc__:
                  raise ValueError(
                      "No docstrings given in {0}".format(func.__name__))
  
              info = _parse_doc(func.__doc__)
              if _HELP not in kwargs or not kwargs[_HELP]:
                  kwargs[_HELP] = info["headline"]
              if _DESCRIPTION not in kwargs or not kwargs[_DESCRIPTION]:
                  kwargs[_DESCRIPTION] = info["description"]
              if _FORMAT_CLASS not in kwargs or not kwargs[_FORMAT_CLASS]:
                  kwargs[_FORMAT_CLASS] = argparse.RawTextHelpFormatter
  
              if not name:
                  name = func.__name__ if hasattr(func, "__name__") else func
  
              res = self.__delegate.add_parser(name, argmap=info["args"], **kwargs)
              res.set_defaults(cmd=func)
  
          else:
              res = self.__delegate.add_parser(name, **kwargs)
  
          return res
docs: Add parser.
  
          This method makes a new sub command parser. It takes same arguments
          as add_parser() of the action class made by
          argparse.ArgumentParser.add_subparsers.
  
          In addition to, it takes one positional argument `func`, which is the
          function implements process of this sub command. The `func` will be used
          to determine the name, help, and description of this sub command. The
          function `func` will also be set as a default value of `cmd` attribute.
  
          If you want to choose name of this sub command, use keyword argument
          `name`.
  
          Args:
            func: function implements the process of this command.
            name: name of this command. If not give, the function name is used.
  
          Returns:
            new ArgumentParser object.
  
          Raises:
            ValueError: if the given function does not have docstrings.