.pre-commit-config.yaml
# https://pre-commit.com
# https://pre-commit.com/hooks.html
# https://pre-commit.com/#creating-new-hooks
# Thanks to https://github.com/sloria/environs/blob/master/.pre-commit-config.yaml
# https://pre-commit.com/#top_level-default_language_version
default_language_version:
python: python3.11
# https://pre-commit.ci/#configuration
ci:
skip: [local-nitpick, autofix-docs, pylint]
repos:
- repo: local
hooks:
# Run nitpick also with tox, because local repos don't seem to work well with https://pre-commit.ci/
# Nitpick doesn't run on pre-commit.ci because it needs HTTP requests to get the default style from GitHub
# pre-commit.ci intentionally does not allow network access at runtime for free tier as this is easy to abuse (miners, etc.)
# https://github.com/pre-commit-ci/issues/issues/47
- id: local-nitpick
name: "nitpick fix (auto fixing files, local hook)"
entry: poetry run nitpick fix
language: system
always_run: true
pass_filenames: false
stages: [commit]
- id: autofix-docs
name: Autofix ReST documentation from docstrings and TOML
entry: poetry run python3 docs/autofix_docs.py
language: system
always_run: true
pass_filenames: false
types: [python, toml]
stages: [commit]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0
hooks:
- id: debug-statements
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/google/keep-sorted
rev: v0.4.0
hooks:
- id: keep-sorted
- repo: https://github.com/pappasam/toml-sort
rev: v0.23.1
hooks:
- id: toml-sort-fix
# Don't sort certain TOML files:
# - style-related files: used to generate YAML that might depend on the order
# - poetry.lock: auto-generated file
exclude: (ideas/|resources/|tests/|poetry.lock)
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.3.5
hooks:
- id: ruff
args: [--fix]
# Recommended by pylint, configurable, less destructive than https://github.com/PyCQA/docformatter
- repo: https://github.com/DanielNoord/pydocstringformatter
rev: v0.7.3
hooks:
- id: pydocstringformatter
- repo: https://github.com/aio-libs/sort-all # TODO: style(pre-commit): add sort-all
rev: v1.2.0
hooks:
- id: sort-all
- repo: https://github.com/psf/black
rev: 24.3.0
hooks:
- id: black
args: [--safe, --quiet]
- repo: https://github.com/asottile/blacken-docs
rev: 1.16.0
hooks:
- id: blacken-docs
additional_dependencies: [black==23.7.0]
- repo: https://github.com/pre-commit/pygrep-hooks
rev: v1.10.0
hooks:
- id: python-check-mock-methods
- id: rst-backticks
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v4.0.0-alpha.8
hooks:
- id: prettier
stages: [commit]
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.9.0
hooks:
- id: mypy
# https://mypy.readthedocs.io/en/stable/command_line.html#cmdoption-mypy-show-error-codes
args: [--show-error-codes]
# Install additional types to fix new warnings that appeared on v0.910:
# https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
# "using --install-types is problematic"
# see https://github.com/pre-commit/mirrors-mypy#using-mypy-with-pre-commit
# attrs should be installed instead of types-attrs
# https://pypi.org/project/types-attrs/
# Note: The attrs package includes type annotations or type stubs since version 18.2.0.
# Please uninstall the types-attrs package if you use this or a newer version.
# See also https://github.com/python/mypy/issues/10084#issuecomment-778641361
additional_dependencies:
[
types-freezegun,
types-toml,
attrs,
types-requests,
types-python-slugify,
types-dataclasses,
]
# Run pylint also with tox, because local repos don't seem to work well with https://pre-commit.ci/
# The recommended way is to use a local hook:
# https://pylint.pycqa.org/en/latest/user_guide/installation/pre-commit-integration.html
- repo: local
hooks:
- id: pylint
name: pylint
entry: .tox/lint/bin/pylint
language: system
types: [python]
exclude: tests/
- repo: https://github.com/shellcheck-py/shellcheck-py
rev: v0.10.0.1
hooks:
- id: shellcheck
- repo: https://github.com/openstack/bashate
rev: 2.1.1
hooks:
- id: bashate
# https://docs.openstack.org/bashate/latest/man/bashate.html#options
args: [-i, E006]
- repo: https://github.com/commitizen-tools/commitizen
rev: v3.21.3
hooks:
- id: commitizen
stages: [commit-msg]