| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595 |
- # Licensed under the GPL: https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
- # For details: https://github.com/PyCQA/pylint/blob/main/LICENSE
- # Copyright (c) https://github.com/PyCQA/pylint/blob/main/CONTRIBUTORS.txt
- """Functions that creates the basic options for the Run and PyLinter classes."""
- from __future__ import annotations
- import re
- import sys
- from typing import TYPE_CHECKING
- from pylint import constants, interfaces
- from pylint.config.callback_actions import (
- _DisableAction,
- _DoNothingAction,
- _EnableAction,
- _ErrorsOnlyModeAction,
- _FullDocumentationAction,
- _GenerateConfigFileAction,
- _GenerateRCFileAction,
- _ListCheckGroupsAction,
- _ListConfidenceLevelsAction,
- _ListExtensionsAction,
- _ListMessagesAction,
- _ListMessagesEnabledAction,
- _LongHelpAction,
- _MessageHelpAction,
- _OutputFormatAction,
- )
- from pylint.typing import Options
- if TYPE_CHECKING:
- from pylint.lint import PyLinter, Run
- def _make_linter_options(linter: PyLinter) -> Options:
- """Return the options used in a PyLinter class."""
- return (
- (
- "ignore",
- {
- "type": "csv",
- "metavar": "<file>[,<file>...]",
- "dest": "black_list",
- "kwargs": {"old_names": ["black_list"]},
- "default": constants.DEFAULT_IGNORE_LIST,
- "help": "Files or directories to be skipped. "
- "They should be base names, not paths.",
- },
- ),
- (
- "ignore-patterns",
- {
- "type": "regexp_csv",
- "metavar": "<pattern>[,<pattern>...]",
- "dest": "black_list_re",
- "default": (re.compile(r"^\.#"),),
- "help": "Files or directories matching the regular expression patterns are"
- " skipped. The regex matches against base names, not paths. The default value "
- "ignores Emacs file locks",
- },
- ),
- (
- "ignore-paths",
- {
- "type": "regexp_paths_csv",
- "metavar": "<pattern>[,<pattern>...]",
- "default": [],
- "help": "Add files or directories matching the regular expressions patterns to the "
- "ignore-list. The regex matches against paths and can be in "
- "Posix or Windows format. Because '\\\\' represents the directory delimiter "
- "on Windows systems, it can't be used as an escape character.",
- },
- ),
- (
- "persistent",
- {
- "default": True,
- "type": "yn",
- "metavar": "<y or n>",
- "help": "Pickle collected data for later comparisons.",
- },
- ),
- (
- "load-plugins",
- {
- "type": "csv",
- "metavar": "<modules>",
- "default": (),
- "help": "List of plugins (as comma separated values of "
- "python module names) to load, usually to register "
- "additional checkers.",
- },
- ),
- (
- "output-format",
- {
- "default": "text",
- "action": _OutputFormatAction,
- "callback": lambda x: x,
- "metavar": "<format>",
- "short": "f",
- "group": "Reports",
- "help": "Set the output format. Available formats are text,"
- " parseable, colorized, json and msvs (visual studio)."
- " You can also give a reporter class, e.g. mypackage.mymodule."
- "MyReporterClass.",
- "kwargs": {"linter": linter},
- },
- ),
- (
- "reports",
- {
- "default": False,
- "type": "yn",
- "metavar": "<y or n>",
- "short": "r",
- "group": "Reports",
- "help": "Tells whether to display a full report or only the "
- "messages.",
- },
- ),
- (
- "evaluation",
- {
- "type": "string",
- "metavar": "<python_expression>",
- "group": "Reports",
- "default": "max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + "
- "convention) / statement) * 10))",
- "help": "Python expression which should return a score less "
- "than or equal to 10. You have access to the variables 'fatal', "
- "'error', 'warning', 'refactor', 'convention', and 'info' which "
- "contain the number of messages in each category, as well as "
- "'statement' which is the total number of statements "
- "analyzed. This score is used by the global "
- "evaluation report (RP0004).",
- },
- ),
- (
- "score",
- {
- "default": True,
- "type": "yn",
- "metavar": "<y or n>",
- "short": "s",
- "group": "Reports",
- "help": "Activate the evaluation score.",
- },
- ),
- (
- "fail-under",
- {
- "default": 10,
- "type": "float",
- "metavar": "<score>",
- "help": "Specify a score threshold under which the program will exit with error.",
- },
- ),
- (
- "fail-on",
- {
- "default": "",
- "type": "csv",
- "metavar": "<msg ids>",
- "help": "Return non-zero exit code if any of these messages/categories are detected,"
- " even if score is above --fail-under value. Syntax same as enable."
- " Messages specified are enabled, while categories only check already-enabled messages.",
- },
- ),
- (
- "confidence",
- {
- "type": "confidence",
- "metavar": "<levels>",
- "default": interfaces.CONFIDENCE_LEVEL_NAMES,
- "group": "Messages control",
- "help": "Only show warnings with the listed confidence levels."
- f" Leave empty to show all. Valid levels: {', '.join(interfaces.CONFIDENCE_LEVEL_NAMES)}.",
- },
- ),
- (
- "enable",
- {
- "action": _EnableAction,
- "callback": lambda x1, x2, x3, x4: x1,
- "default": (),
- "metavar": "<msg ids>",
- "short": "e",
- "group": "Messages control",
- "help": "Enable the message, report, category or checker with the "
- "given id(s). You can either give multiple identifier "
- "separated by comma (,) or put this option multiple time "
- "(only on the command line, not in the configuration file "
- "where it should appear only once). "
- 'See also the "--disable" option for examples.',
- "kwargs": {"linter": linter},
- },
- ),
- (
- "disable",
- {
- "action": _DisableAction,
- "callback": lambda x1, x2, x3, x4: x1,
- "metavar": "<msg ids>",
- "default": (),
- "short": "d",
- "group": "Messages control",
- "help": "Disable the message, report, category or checker "
- "with the given id(s). You can either give multiple identifiers "
- "separated by comma (,) or put this option multiple times "
- "(only on the command line, not in the configuration file "
- "where it should appear only once). "
- 'You can also use "--disable=all" to disable everything first '
- "and then re-enable specific checks. For example, if you want "
- "to run only the similarities checker, you can use "
- '"--disable=all --enable=similarities". '
- "If you want to run only the classes checker, but have no "
- "Warning level messages displayed, use "
- '"--disable=all --enable=classes --disable=W".',
- "kwargs": {"linter": linter},
- },
- ),
- (
- "msg-template",
- {
- "type": "string",
- "default": "",
- "metavar": "<template>",
- "group": "Reports",
- "help": (
- "Template used to display messages. "
- "This is a python new-style format string "
- "used to format the message information. "
- "See doc for all details."
- ),
- },
- ),
- (
- "jobs",
- {
- "type": "int",
- "metavar": "<n-processes>",
- "short": "j",
- "default": 1,
- "help": "Use multiple processes to speed up Pylint. Specifying 0 will "
- "auto-detect the number of processors available to use, and will cap "
- "the count on Windows to avoid hangs.",
- },
- ),
- (
- "unsafe-load-any-extension",
- {
- "type": "yn",
- "metavar": "<y or n>",
- "default": False,
- "hide": True,
- "help": (
- "Allow loading of arbitrary C extensions. Extensions"
- " are imported into the active Python interpreter and"
- " may run arbitrary code."
- ),
- },
- ),
- (
- "limit-inference-results",
- {
- "type": "int",
- "metavar": "<number-of-results>",
- "default": 100,
- "help": (
- "Control the amount of potential inferred values when inferring "
- "a single object. This can help the performance when dealing with "
- "large functions or complex, nested conditions."
- ),
- },
- ),
- (
- "extension-pkg-allow-list",
- {
- "type": "csv",
- "metavar": "<pkg[,pkg]>",
- "default": [],
- "help": (
- "A comma-separated list of package or module names"
- " from where C extensions may be loaded. Extensions are"
- " loading into the active Python interpreter and may run"
- " arbitrary code."
- ),
- },
- ),
- (
- "extension-pkg-whitelist",
- {
- "type": "csv",
- "metavar": "<pkg[,pkg]>",
- "default": [],
- "help": (
- "A comma-separated list of package or module names"
- " from where C extensions may be loaded. Extensions are"
- " loading into the active Python interpreter and may run"
- " arbitrary code. (This is an alternative name to"
- " extension-pkg-allow-list for backward compatibility.)"
- ),
- },
- ),
- (
- "suggestion-mode",
- {
- "type": "yn",
- "metavar": "<y or n>",
- "default": True,
- "help": (
- "When enabled, pylint would attempt to guess common "
- "misconfiguration and emit user-friendly hints instead "
- "of false-positive error messages."
- ),
- },
- ),
- (
- "exit-zero",
- {
- "action": "store_true",
- "default": False,
- "metavar": "<flag>",
- "help": (
- "Always return a 0 (non-error) status code, even if "
- "lint errors are found. This is primarily useful in "
- "continuous integration scripts."
- ),
- },
- ),
- (
- "from-stdin",
- {
- "action": "store_true",
- "default": False,
- "metavar": "<flag>",
- "help": (
- "Interpret the stdin as a python script, whose filename "
- "needs to be passed as the module_or_package argument."
- ),
- },
- ),
- (
- "source-roots",
- {
- "type": "glob_paths_csv",
- "metavar": "<path>[,<path>...]",
- "default": (),
- "help": "Add paths to the list of the source roots. Supports globbing patterns. "
- "The source root is an absolute path or a path relative to the current working "
- "directory used to determine a package namespace for modules located under the "
- "source root.",
- },
- ),
- (
- "recursive",
- {
- "type": "yn",
- "metavar": "<yn>",
- "default": False,
- "help": "Discover python modules and packages in the file system subtree.",
- },
- ),
- (
- "py-version",
- {
- "default": sys.version_info[:2],
- "type": "py_version",
- "metavar": "<py_version>",
- "help": (
- "Minimum Python version to use for version dependent checks. "
- "Will default to the version used to run pylint."
- ),
- },
- ),
- (
- "ignored-modules",
- {
- "default": (),
- "type": "csv",
- "metavar": "<module names>",
- "help": "List of module names for which member attributes "
- "should not be checked (useful for modules/projects "
- "where namespaces are manipulated during runtime and "
- "thus existing member attributes cannot be "
- "deduced by static analysis). It supports qualified "
- "module names, as well as Unix pattern matching.",
- },
- ),
- (
- "analyse-fallback-blocks",
- {
- "default": False,
- "type": "yn",
- "metavar": "<y or n>",
- "help": "Analyse import fallback blocks. This can be used to "
- "support both Python 2 and 3 compatible code, which "
- "means that the block might have code that exists "
- "only in one or another interpreter, leading to false "
- "positives when analysed.",
- },
- ),
- (
- "clear-cache-post-run",
- {
- "default": False,
- "type": "yn",
- "metavar": "<y or n>",
- "help": "Clear in-memory caches upon conclusion of linting. "
- "Useful if running pylint in a server-like mode.",
- },
- ),
- )
- def _make_run_options(self: Run) -> Options:
- """Return the options used in a Run class."""
- return (
- (
- "rcfile",
- {
- "action": _DoNothingAction,
- "kwargs": {},
- "group": "Commands",
- "help": "Specify a configuration file to load.",
- "hide_from_config_file": True,
- },
- ),
- (
- "output",
- {
- "action": _DoNothingAction,
- "kwargs": {},
- "group": "Commands",
- "help": "Specify an output file.",
- "hide_from_config_file": True,
- },
- ),
- (
- "init-hook",
- {
- "action": _DoNothingAction,
- "kwargs": {},
- "help": "Python code to execute, usually for sys.path "
- "manipulation such as pygtk.require().",
- },
- ),
- (
- "help-msg",
- {
- "action": _MessageHelpAction,
- "kwargs": {"Run": self},
- "group": "Commands",
- "help": "Display a help message for the given message id and "
- "exit. The value may be a comma separated list of message ids.",
- "hide_from_config_file": True,
- },
- ),
- (
- "list-msgs",
- {
- "action": _ListMessagesAction,
- "kwargs": {"Run": self},
- "group": "Commands",
- "help": "Display a list of all pylint's messages divided by whether "
- "they are emittable with the given interpreter.",
- "hide_from_config_file": True,
- },
- ),
- (
- "list-msgs-enabled",
- {
- "action": _ListMessagesEnabledAction,
- "kwargs": {"Run": self},
- "group": "Commands",
- "help": "Display a list of what messages are enabled, "
- "disabled and non-emittable with the given configuration.",
- "hide_from_config_file": True,
- },
- ),
- (
- "list-groups",
- {
- "action": _ListCheckGroupsAction,
- "kwargs": {"Run": self},
- "group": "Commands",
- "help": "List pylint's message groups.",
- "hide_from_config_file": True,
- },
- ),
- (
- "list-conf-levels",
- {
- "action": _ListConfidenceLevelsAction,
- "kwargs": {"Run": self},
- "group": "Commands",
- "help": "Generate pylint's confidence levels.",
- "hide_from_config_file": True,
- },
- ),
- (
- "list-extensions",
- {
- "action": _ListExtensionsAction,
- "kwargs": {"Run": self},
- "group": "Commands",
- "help": "List available extensions.",
- "hide_from_config_file": True,
- },
- ),
- (
- "full-documentation",
- {
- "action": _FullDocumentationAction,
- "kwargs": {"Run": self},
- "group": "Commands",
- "help": "Generate pylint's full documentation.",
- "hide_from_config_file": True,
- },
- ),
- (
- "generate-rcfile",
- {
- "action": _GenerateRCFileAction,
- "kwargs": {"Run": self},
- "group": "Commands",
- "help": "Generate a sample configuration file according to "
- "the current configuration. You can put other options "
- "before this one to get them in the generated "
- "configuration.",
- "hide_from_config_file": True,
- },
- ),
- (
- "generate-toml-config",
- {
- "action": _GenerateConfigFileAction,
- "kwargs": {"Run": self},
- "group": "Commands",
- "help": "Generate a sample configuration file according to "
- "the current configuration. You can put other options "
- "before this one to get them in the generated "
- "configuration. The config is in the .toml format.",
- "hide_from_config_file": True,
- },
- ),
- (
- "errors-only",
- {
- "action": _ErrorsOnlyModeAction,
- "kwargs": {"Run": self},
- "short": "E",
- "help": "In error mode, messages with a category besides "
- "ERROR or FATAL are suppressed, and no reports are done by default. "
- "Error mode is compatible with disabling specific errors. ",
- "hide_from_config_file": True,
- },
- ),
- (
- "verbose",
- {
- "action": _DoNothingAction,
- "kwargs": {},
- "short": "v",
- "help": "In verbose mode, extra non-checker-related info "
- "will be displayed.",
- "hide_from_config_file": True,
- "metavar": "",
- },
- ),
- (
- "enable-all-extensions",
- {
- "action": _DoNothingAction,
- "kwargs": {},
- "help": "Load and enable all available extensions. "
- "Use --list-extensions to see a list all available extensions.",
- "hide_from_config_file": True,
- "metavar": "",
- },
- ),
- (
- "long-help",
- {
- "action": _LongHelpAction,
- "kwargs": {"Run": self},
- "help": "Show more verbose help.",
- "group": "Commands",
- "hide_from_config_file": True,
- },
- ),
- )
|