def METHOD_NAME():
  p = ArgumentParserWithCustomError( add_help=False )
  p.add_argument( "-v", "--version", action="store_true"          )
  p.add_argument( "-h", "--help",    action="store_true"          )
  # Run-related arguments
  p.add_argument(       "--demo",    action="store_true"          )
  p.add_argument(       "--design"                                )
  p.add_argument(       "--update",  action="store_true"          )
  p.add_argument(       "--backend", default="make",
                                     choices=("make", "ninja")    )
  # Stash-related arguments
  p.add_argument(       "args", type=str, nargs='*' ) # positional
  p.add_argument( "-p", "--path"                                  )
  p.add_argument( "-s", "--step", type=int                        )
  p.add_argument( "-m", "--msg"                                   )
  p.add_argument(       "--hash"                                  )
  p.add_argument(       "--all",     action="store_true"          )
  p.add_argument(       "--verbose", action="store_true"          )
  opts = p.parse_args()
  if opts.help and not opts.args: p.error() # print help only if not stash
  return opts