def get_cli_parser(func, skip_first=0, parser=None):
    """makes a parser for parsing cli arguments for `func`.

    :param callable func: the function the parser will parse
    :param int skip_first: skip this many first arguments of the func
    :param ArgumentParser parser: bind func to this parser.
    """
    help_msg, func_args = _get_func_args(func)
    if not parser:
        parser = ArgumentParser(description=help_msg)

    for i, arg in enumerate(func_args):
        arg_name, arg_type, arg_default, arg_required, arg_help = arg
        if i < skip_first:
            continue

        if arg_default is not _empty:
            parser.add_argument(
                arg_name, type=arg_type, default=arg_default,
                required=arg_required, help=arg_help
            )
        else:
            parser.add_argument(
                arg_name, type=arg_type, required=arg_required, help=arg_help
            )
    return parser