docs: def create_parser():
      """Create the parser for the pep8radius CLI."""
      from argparse import ArgumentParser, FileType
  
      description = ("PEP8 clean only the parts of the files which you have "
                     "touched since the last commit, a previous commit or "
                     "(the merge-base of) a branch.")
      epilog = ("Run before you commit, against a previous commit or "
                "branch before merging.")
      parser = ArgumentParser(description=description,
                              epilog=epilog,
                              prog='pep8radius')
  
      parser.add_argument('rev',
                          help='commit or name of branch to compare against',
                          nargs='?')
  
      parser.add_argument('--version',
                          help='print version number and exit',
                          action='store_true')
  
      parser.add_argument('-d', '--diff', action='store_true', dest='diff',
                          help='print the diff of fixed source vs original')
      parser.add_argument('--error-status', action='store_true',
                          dest='error_status',
                          help="return a shell status code of 1 if there are"
                               " any fixes")
      parser.add_argument('-i', '--in-place', action='store_true',
                          help="make the fixes in place; modify the files")
      parser.add_argument('--no-color', action='store_true',
                          help='do not print diffs in color '
                               '(default is to use color)')
      parser.add_argument('-v', '--verbose', action='count', dest='verbose',
                          default=0,
                          help='print verbose messages; '
                          'multiple -v result in more verbose messages '
                          '(one less -v is passed to autopep8)')
      parser.add_argument('--from-diff', type=FileType('r'), metavar='DIFF',
                          help="Experimental: rather than calling out to version"
                               " control, just pass in a diff; "
                               "the modified lines will be fixed")
  
      ap = parser.add_argument_group('pep8', 'Pep8 options to pass to autopep8.')
      ap.add_argument('-p', '--pep8-passes', metavar='n',
                      default=-1, type=int,
                      help='maximum number of additional pep8 passes '
                      '(default: infinite)')
      ap.add_argument('-a', '--aggressive', action='count', default=0,
                      help='enable non-whitespace changes; '
                      'multiple -a result in more aggressive changes')
      ap.add_argument('--experimental', action='store_true',
                      help='enable experimental fixes')
      ap.add_argument('--exclude', metavar='globs',
                      help='exclude file/directory names that match these '
                      'comma-separated globs')
      ap.add_argument('--list-fixes', action='store_true',
                      help='list codes for fixes and exit; '
                      'used by --ignore and --select')
      ap.add_argument('--ignore', metavar='errors', default='',
                      help='do not fix these errors/warnings '
                      '(default: {0})'.format(DEFAULT_IGNORE))
      ap.add_argument('--select', metavar='errors', default='',
                      help='fix only these errors/warnings (e.g. E4,W)')
      ap.add_argument('--max-line-length', metavar='n', default=79, type=int,
                      help='set maximum allowed line length '
                      '(default: %(default)s)')
      ap.add_argument('--indent-size', default=DEFAULT_INDENT_SIZE,
                      type=int, metavar='n',
                      help='number of spaces per indent level '
                      '(default %(default)s)')
  
      df = parser.add_argument_group('docformatter',
                                     'Fix docstrings for PEP257.')
      df.add_argument('-f', '--docformatter', action='store_true',
                      help='Use docformatter')
      df.add_argument('--no-blank', dest='post_description_blank',
                      action='store_false',
                      help='Do not add blank line after description')
      df.add_argument('--pre-summary-newline',
                      action='store_true',
                      help='add a newline before the summary of a '
                      'multi-line docstring')
      df.add_argument('--force-wrap', action='store_true',
                      help='force descriptions to be wrapped even if it may '
                      'result in a mess')
  
      cg = parser.add_argument_group('config',
                                     'Change default options based on global '
                                     'or local (project) config files.')
      cg.add_argument('--global-config',
                      default=DEFAULT_CONFIG,
                      metavar='filename',
                      help='path to global pep8 config file; ' +
                      " if this file does not exist then this is ignored" +
                      '(default: %s)' % DEFAULT_CONFIG)
      cg.add_argument('--ignore-local-config', action='store_true',
                      help="don't look for and apply local config files; "
                      'if not passed, defaults are updated with any '
                      "config files in the project's root directory")
  
      yp = parser.add_argument_group('yapf',
                                     'Options for yapf, alternative to autopep8. '
                                     'Currently any other options are ignored.')
      yp.add_argument('-y', '--yapf', action='store_true',
                      help='Use yapf rather than autopep8. '
                      'This ignores other arguments outside of this group.')
      yp.add_argument('--style', metavar='', default='pep8',
                      help='style either pep8, google, name of file with style'
                      'settings, or a dict')
  
      return parser