Pre-commit integrationΒΆ
pylint can be used as a pre-commit hook. We however
discourage it as pylint -- due to its speed -- is more suited to a continuous integration
job or a git pre-push hook, especially if your repository is large.
Since pylint needs to import modules and dependencies to work correctly, the
hook only works with a local installation of pylint (in your environment). It means
it can't be used with pre-commit.ci, and you will need to add the following to your
.pre-commit-config.yaml
.. sourcecode:: yaml
- ci:
skip: [pylint]
Another limitation is that pylint should analyse all your code at once in order to best infer the
actual values that result from calls. If only some of the files are given, pylint might
miss a particular value's type and produce inferior inference for the subset. Since pre-commit slices
the files given to it in order to parallelize the processing, the result can be degraded.
It can also be unexpectedly different when the file set changes because the new slicing can change
the inference. Thus the require_serial option should be set to true if correctness and determinism
are more important than parallelization to you.
If you installed pylint locally it can be added to .pre-commit-config.yaml
as follows:
- repo: local
hooks:
- id: pylint
name: pylint
entry: pylint
language: system
types: [python]
require_serial: true
args:
[
"-rn", # Only display messages
"-sn", # Don't display the score
]
You can use args to pass command line arguments as described in the Tutorial.
A hook with more arguments could look something like this:
- repo: local
hooks:
- id: pylint
name: pylint
entry: pylint
language: system
types: [python]
args:
[
"-rn", # Only display messages
"-sn", # Don't display the score
"--rcfile=pylintrc", # Link to your config file
"--load-plugins=pylint.extensions.docparams", # Load an extension
]