andreoliwa/nitpick

View on GitHub
.pre-commit-config.yaml

Summary

Maintainability
Test Coverage
# 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]