| ci: |
| skip: [pylint] |
| |
| repos: |
| - repo: https://github.com/pre-commit/pre-commit-hooks |
| rev: v6.0.0 |
| hooks: |
| - id: trailing-whitespace |
| exclude: tests(/\w*)*/functional/t/trailing_whitespaces.py|tests/pyreverse/data/.*.html|doc/data/messages/t/trailing-whitespace/bad.py |
| # - id: file-contents-sorter # commented out because it does not preserve comments order |
| # args: ["--ignore-case", "--unique"] |
| # files: "custom_dict.txt" |
| - id: end-of-file-fixer |
| exclude: | |
| (?x)^( |
| tests(/\w*)*/functional/m/missing/missing_final_newline.py| |
| tests/functional/t/trailing_newlines.py| |
| doc/data/messages/t/trailing-newlines/bad.py| |
| doc/data/messages/m/missing-final-newline/bad/lf.py| |
| doc/data/messages/m/missing-final-newline/bad/crlf.py |
| )$ |
| - repo: https://github.com/astral-sh/ruff-pre-commit |
| rev: "v0.12.10" |
| hooks: |
| - id: ruff-check |
| args: ["--fix"] |
| exclude: doc/data/messages |
| - id: ruff-check |
| name: ruff-doc |
| files: doc/data/messages |
| # Please exclude using doc/data/ruff.toml |
| # exclude: "" # Leave empty |
| - repo: https://github.com/Pierre-Sassoulas/copyright_notice_precommit |
| rev: 0.1.2 |
| hooks: |
| - id: copyright-notice |
| args: ["--notice=script/copyright.txt", "--enforce-all"] |
| exclude: tests(/\w*)*/functional/|tests/input|doc/data/messages|examples/|setup.py|tests(/\w*)*data/ |
| types: [python] |
| - repo: https://github.com/PyCQA/isort |
| rev: 6.0.1 |
| hooks: |
| - id: isort |
| exclude: doc/data/messages/ |
| - repo: https://github.com/psf/black |
| rev: 25.1.0 |
| hooks: |
| - id: black |
| args: [--safe, --quiet] |
| exclude: &fixtures tests(/\w*)*/functional/|tests/input|doc/data/messages|tests(/\w*)*data/ |
| - id: black |
| name: black-doc |
| args: [--safe, --quiet] |
| files: doc/data/messages/ |
| exclude: | |
| (?x)^( |
| doc/data/messages/b/bad-indentation/bad.py| |
| doc/data/messages/i/inconsistent-quotes/bad.py| |
| doc/data/messages/i/invalid-format-index/bad.py| |
| doc/data/messages/l/line-too-long/bad.py| |
| doc/data/messages/m/missing-final-newline/bad/crlf.py| |
| doc/data/messages/m/missing-final-newline/bad/lf.py| |
| doc/data/messages/m/multiple-statements/bad.py| |
| doc/data/messages/r/redundant-u-string-prefix/bad.py| |
| doc/data/messages/s/superfluous-parens/bad/example_1.py| |
| doc/data/messages/s/syntax-error/bad.py| |
| doc/data/messages/t/too-many-ancestors/bad.py| |
| doc/data/messages/t/trailing-comma-tuple/bad.py| |
| doc/data/messages/t/trailing-newlines/bad.py| |
| doc/data/messages/t/trailing-whitespace/bad.py| |
| doc/data/messages/u/unnecessary-semicolon/bad.py |
| )$ |
| - repo: https://github.com/Pierre-Sassoulas/black-disable-checker |
| rev: v1.1.3 |
| hooks: |
| - id: black-disable-checker |
| - repo: local |
| hooks: |
| - id: pylint |
| name: pylint |
| entry: pylint |
| language: system |
| types: [python] |
| # Not that problematic to run in parallel see Pre-commit |
| # integration in the doc for details |
| # require_serial: true |
| args: ["-rn", "-sn", "--rcfile=pylintrc", "--fail-on=I"] |
| exclude: tests(/\w*)*/functional/|tests/input|tests(/\w*)*data/|doc/ |
| - id: pyright |
| name: pyright |
| description: "Python command line wrapper for pyright, a static type checker" |
| entry: pyright |
| language: python |
| "types_or": [python, pyi] |
| require_serial: true |
| minimum_pre_commit_version: "2.9.2" |
| exclude: tests(/\w*)*/functional/|tests/input|tests(/.*)+/conftest.py|doc/data/messages|tests(/\w*)*data/ |
| stages: [manual] |
| # We define an additional manual step to allow running pylint with a spelling |
| # checker in CI. |
| - id: pylint |
| alias: pylint-with-spelling |
| name: pylint |
| entry: pylint |
| language: system |
| types: [python] |
| args: |
| [ |
| "-rn", |
| "-sn", |
| "--rcfile=pylintrc", |
| "--fail-on=I", |
| "--spelling-dict=en", |
| "--output-format=github", |
| ] |
| exclude: tests(/\w*)*/functional/|tests/input|tests(/\w*)*data/|doc/ |
| stages: [manual] |
| - id: check-newsfragments |
| name: Check newsfragments |
| entry: python3 -m script.check_newsfragments |
| language: system |
| types: [text] |
| files: ^(doc/whatsnew/fragments) |
| exclude: doc/whatsnew/fragments/_.*.rst |
| - repo: https://github.com/rstcheck/rstcheck |
| rev: "v6.2.5" |
| hooks: |
| - id: rstcheck |
| args: ["--report-level=warning"] |
| files: ^(doc/(.*/)*.*\.rst) |
| # TODO remove pydantic once 2.12.0 is released |
| additional_dependencies: |
| ["Sphinx==7.4.3", "pydantic>=2.12.0a1;python_version>='3.14'"] |
| - repo: https://github.com/pre-commit/mirrors-mypy |
| rev: v1.17.1 |
| hooks: |
| - id: mypy |
| name: mypy |
| entry: mypy |
| language: python |
| types: [python] |
| args: [] |
| require_serial: true |
| additional_dependencies: |
| ["isort>=5", "platformdirs==2.2.0", "py==1.11", "tomlkit>=0.10.1"] |
| exclude: tests(/\w*)*/functional/|tests/input|tests(/.*)+/conftest.py|doc/data/messages|tests(/\w*)*data/ |
| - repo: https://github.com/rbubley/mirrors-prettier |
| rev: v3.6.2 |
| hooks: |
| - id: prettier |
| args: [--prose-wrap=always, --print-width=88] |
| exclude: (tests(/\w*)*data/|.github/FUNDING.yml) |
| - repo: https://github.com/DanielNoord/pydocstringformatter |
| rev: v0.7.5 |
| hooks: |
| - id: pydocstringformatter |
| exclude: *fixtures |
| args: ["--max-summary-lines=2", "--linewrap-full-docstring"] |
| files: "pylint" |
| - repo: https://github.com/PyCQA/bandit |
| rev: 1.8.6 |
| hooks: |
| - id: bandit |
| args: ["-r", "-lll"] |
| exclude: *fixtures |
| - repo: https://github.com/codespell-project/codespell |
| rev: v2.4.1 |
| hooks: |
| - id: codespell |
| args: ["--toml=pyproject.toml"] |
| additional_dependencies: |
| - tomli |
| - repo: https://github.com/tox-dev/pyproject-fmt |
| rev: "v2.6.0" |
| hooks: |
| - id: pyproject-fmt |
| - repo: https://github.com/abravalheri/validate-pyproject |
| rev: v0.24.1 |
| hooks: |
| - id: validate-pyproject |