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
        ]