| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 |
- """Contains the logic for all of the default options for Flake8."""
- from __future__ import annotations
- import argparse
- from flake8 import defaults
- from flake8.options.manager import OptionManager
- def stage1_arg_parser() -> argparse.ArgumentParser:
- """Register the preliminary options on our OptionManager.
- The preliminary options include:
- - ``-v``/``--verbose``
- - ``--output-file``
- - ``--append-config``
- - ``--config``
- - ``--isolated``
- - ``--enable-extensions``
- """
- parser = argparse.ArgumentParser(add_help=False)
- parser.add_argument(
- "-v",
- "--verbose",
- default=0,
- action="count",
- help="Print more information about what is happening in flake8. "
- "This option is repeatable and will increase verbosity each "
- "time it is repeated.",
- )
- parser.add_argument(
- "--output-file", default=None, help="Redirect report to a file."
- )
- # Config file options
- parser.add_argument(
- "--append-config",
- action="append",
- default=[],
- help="Provide extra config files to parse in addition to the files "
- "found by Flake8 by default. These files are the last ones read "
- "and so they take the highest precedence when multiple files "
- "provide the same option.",
- )
- parser.add_argument(
- "--config",
- default=None,
- help="Path to the config file that will be the authoritative config "
- "source. This will cause Flake8 to ignore all other "
- "configuration files.",
- )
- parser.add_argument(
- "--isolated",
- default=False,
- action="store_true",
- help="Ignore all configuration files.",
- )
- # Plugin enablement options
- parser.add_argument(
- "--enable-extensions",
- help="Enable plugins and extensions that are otherwise disabled "
- "by default",
- )
- parser.add_argument(
- "--require-plugins",
- help="Require specific plugins to be installed before running",
- )
- return parser
- class JobsArgument:
- """Type callback for the --jobs argument."""
- def __init__(self, arg: str) -> None:
- """Parse and validate the --jobs argument.
- :param arg: The argument passed by argparse for validation
- """
- self.is_auto = False
- self.n_jobs = -1
- if arg == "auto":
- self.is_auto = True
- elif arg.isdigit():
- self.n_jobs = int(arg)
- else:
- raise argparse.ArgumentTypeError(
- f"{arg!r} must be 'auto' or an integer.",
- )
- def __repr__(self) -> str:
- """Representation for debugging."""
- return f"{type(self).__name__}({str(self)!r})"
- def __str__(self) -> str:
- """Format our JobsArgument class."""
- return "auto" if self.is_auto else str(self.n_jobs)
- def register_default_options(option_manager: OptionManager) -> None:
- """Register the default options on our OptionManager.
- The default options include:
- - ``-q``/``--quiet``
- - ``--color``
- - ``--count``
- - ``--exclude``
- - ``--extend-exclude``
- - ``--filename``
- - ``--format``
- - ``--hang-closing``
- - ``--ignore``
- - ``--extend-ignore``
- - ``--per-file-ignores``
- - ``--max-line-length``
- - ``--max-doc-length``
- - ``--indent-size``
- - ``--select``
- - ``--extend-select``
- - ``--disable-noqa``
- - ``--show-source``
- - ``--statistics``
- - ``--exit-zero``
- - ``-j``/``--jobs``
- - ``--tee``
- - ``--benchmark``
- - ``--bug-report``
- """
- add_option = option_manager.add_option
- add_option(
- "-q",
- "--quiet",
- default=0,
- action="count",
- parse_from_config=True,
- help="Report only file names, or nothing. This option is repeatable.",
- )
- add_option(
- "--color",
- choices=("auto", "always", "never"),
- default="auto",
- help="Whether to use color in output. Defaults to `%(default)s`.",
- )
- add_option(
- "--count",
- action="store_true",
- parse_from_config=True,
- help="Print total number of errors to standard output after "
- "all other output.",
- )
- add_option(
- "--exclude",
- metavar="patterns",
- default=",".join(defaults.EXCLUDE),
- comma_separated_list=True,
- parse_from_config=True,
- normalize_paths=True,
- help="Comma-separated list of files or directories to exclude. "
- "(Default: %(default)s)",
- )
- add_option(
- "--extend-exclude",
- metavar="patterns",
- default="",
- parse_from_config=True,
- comma_separated_list=True,
- normalize_paths=True,
- help="Comma-separated list of files or directories to add to the list "
- "of excluded ones.",
- )
- add_option(
- "--filename",
- metavar="patterns",
- default="*.py",
- parse_from_config=True,
- comma_separated_list=True,
- help="Only check for filenames matching the patterns in this comma-"
- "separated list. (Default: %(default)s)",
- )
- add_option(
- "--stdin-display-name",
- default="stdin",
- help="The name used when reporting errors from code passed via stdin. "
- "This is useful for editors piping the file contents to flake8. "
- "(Default: %(default)s)",
- )
- # TODO(sigmavirus24): Figure out --first/--repeat
- # NOTE(sigmavirus24): We can't use choices for this option since users can
- # freely provide a format string and that will break if we restrict their
- # choices.
- add_option(
- "--format",
- metavar="format",
- default="default",
- parse_from_config=True,
- help=(
- f"Format errors according to the chosen formatter "
- f"({', '.join(sorted(option_manager.formatter_names))}) "
- f"or a format string containing %%-style "
- f"mapping keys (code, col, path, row, text). "
- f"For example, "
- f"``--format=pylint`` or ``--format='%%(path)s %%(code)s'``. "
- f"(Default: %(default)s)"
- ),
- )
- add_option(
- "--hang-closing",
- action="store_true",
- parse_from_config=True,
- help="Hang closing bracket instead of matching indentation of opening "
- "bracket's line.",
- )
- add_option(
- "--ignore",
- metavar="errors",
- parse_from_config=True,
- comma_separated_list=True,
- help=(
- f"Comma-separated list of error codes to ignore (or skip). "
- f"For example, ``--ignore=E4,E51,W234``. "
- f"(Default: {','.join(defaults.IGNORE)})"
- ),
- )
- add_option(
- "--extend-ignore",
- metavar="errors",
- parse_from_config=True,
- comma_separated_list=True,
- help="Comma-separated list of error codes to add to the list of "
- "ignored ones. For example, ``--extend-ignore=E4,E51,W234``.",
- )
- add_option(
- "--per-file-ignores",
- default="",
- parse_from_config=True,
- help="A pairing of filenames and violation codes that defines which "
- "violations to ignore in a particular file. The filenames can be "
- "specified in a manner similar to the ``--exclude`` option and the "
- "violations work similarly to the ``--ignore`` and ``--select`` "
- "options.",
- )
- add_option(
- "--max-line-length",
- type=int,
- metavar="n",
- default=defaults.MAX_LINE_LENGTH,
- parse_from_config=True,
- help="Maximum allowed line length for the entirety of this run. "
- "(Default: %(default)s)",
- )
- add_option(
- "--max-doc-length",
- type=int,
- metavar="n",
- default=None,
- parse_from_config=True,
- help="Maximum allowed doc line length for the entirety of this run. "
- "(Default: %(default)s)",
- )
- add_option(
- "--indent-size",
- type=int,
- metavar="n",
- default=defaults.INDENT_SIZE,
- parse_from_config=True,
- help="Number of spaces used for indentation (Default: %(default)s)",
- )
- add_option(
- "--select",
- metavar="errors",
- parse_from_config=True,
- comma_separated_list=True,
- help=(
- "Limit the reported error codes to codes prefix-matched by this "
- "list. "
- "You usually do not need to specify this option as the default "
- "includes all installed plugin codes. "
- "For example, ``--select=E4,E51,W234``."
- ),
- )
- add_option(
- "--extend-select",
- metavar="errors",
- parse_from_config=True,
- comma_separated_list=True,
- help=(
- "Add additional error codes to the default ``--select``. "
- "You usually do not need to specify this option as the default "
- "includes all installed plugin codes. "
- "For example, ``--extend-select=E4,E51,W234``."
- ),
- )
- add_option(
- "--disable-noqa",
- default=False,
- parse_from_config=True,
- action="store_true",
- help='Disable the effect of "# noqa". This will report errors on '
- 'lines with "# noqa" at the end.',
- )
- # TODO(sigmavirus24): Decide what to do about --show-pep8
- add_option(
- "--show-source",
- action="store_true",
- parse_from_config=True,
- help="Show the source generate each error or warning.",
- )
- add_option(
- "--no-show-source",
- action="store_false",
- dest="show_source",
- parse_from_config=False,
- help="Negate --show-source",
- )
- add_option(
- "--statistics",
- action="store_true",
- parse_from_config=True,
- help="Count errors.",
- )
- # Flake8 options
- add_option(
- "--exit-zero",
- action="store_true",
- help='Exit with status code "0" even if there are errors.',
- )
- add_option(
- "-j",
- "--jobs",
- default="auto",
- parse_from_config=True,
- type=JobsArgument,
- help="Number of subprocesses to use to run checks in parallel. "
- 'This is ignored on Windows. The default, "auto", will '
- "auto-detect the number of processors available to use. "
- "(Default: %(default)s)",
- )
- add_option(
- "--tee",
- default=False,
- parse_from_config=True,
- action="store_true",
- help="Write to stdout and output-file.",
- )
- # Benchmarking
- add_option(
- "--benchmark",
- default=False,
- action="store_true",
- help="Print benchmark information about this run of Flake8",
- )
- # Debugging
- add_option(
- "--bug-report",
- action="store_true",
- help="Print information necessary when preparing a bug report",
- )
|