repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: a27a2e47c7751b639d2b5badf0ef6ff11fee893f  # frozen: v0.15.4
    hooks:
      - id: ruff-check
        name: Run Ruff (lint) on Apple/
        args: [--exit-non-zero-on-fix, --config=Apple/.ruff.toml]
        files: ^Apple/
      - id: ruff-check
        name: Run Ruff (lint) on Doc/
        args: [--exit-non-zero-on-fix]
        files: ^Doc/
      - id: ruff-check
        name: Run Ruff (lint) on Lib/test/
        args: [--exit-non-zero-on-fix]
        files: ^Lib/test/
      - id: ruff-check
        name: Run Ruff (lint) on Tools/build/
        args: [--exit-non-zero-on-fix, --config=Tools/build/.ruff.toml]
        files: ^Tools/build/
      - id: ruff-check
        name: Run Ruff (lint) on Tools/i18n/
        args: [--exit-non-zero-on-fix, --config=Tools/i18n/.ruff.toml]
        files: ^Tools/i18n/
      - id: ruff-check
        name: Run Ruff (lint) on Argument Clinic
        args: [--exit-non-zero-on-fix, --config=Tools/clinic/.ruff.toml]
        files: ^Tools/clinic/|Lib/test/test_clinic.py
      - id: ruff-check
        name: Run Ruff (lint) on Tools/peg_generator/
        args: [--exit-non-zero-on-fix, --config=Tools/peg_generator/.ruff.toml]
        files: ^Tools/peg_generator/
      - id: ruff-check
        name: Run Ruff (lint) on Tools/wasm/
        args: [--exit-non-zero-on-fix, --config=Tools/wasm/.ruff.toml]
        files: ^Tools/wasm/
      - id: ruff-format
        name: Run Ruff (format) on Apple/
        args: [--exit-non-zero-on-fix, --config=Apple/.ruff.toml]
        files: ^Apple
      - id: ruff-format
        name: Run Ruff (format) on Doc/
        args: [--exit-non-zero-on-fix]
        files: ^Doc/
      - id: ruff-format
        name: Run Ruff (format) on Tools/build/check_warnings.py
        args: [--exit-non-zero-on-fix, --config=Tools/build/.ruff.toml]
        files: ^Tools/build/check_warnings.py
      - id: ruff-format
        name: Run Ruff (format) on Tools/wasm/
        args: [--exit-non-zero-on-fix, --config=Tools/wasm/.ruff.toml]
        files: ^Tools/wasm/

  - repo: https://github.com/psf/black-pre-commit-mirror
    rev: ea488cebbfd88a5f50b8bd95d5c829d0bb76feb8  # frozen: 26.1.0
    hooks:
      - id: black
        name: Run Black on Tools/jit/
        files: ^Tools/jit/

  - repo: https://github.com/Lucas-C/pre-commit-hooks
    rev: ad1b27d73581aa16cca06fc4a0761fc563ffe8e8  # frozen: v1.5.6
    hooks:
      - id: remove-tabs
        types: [python]

  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c  # frozen: v6.0.0
    hooks:
      - id: check-case-conflict
      - id: check-merge-conflict
      - id: check-toml
        exclude: ^Lib/test/test_tomllib/
      - id: check-yaml
      - id: end-of-file-fixer
        types_or: [python, yaml]
        exclude: Lib/test/tokenizedata/coding20731.py
      - id: end-of-file-fixer
        files: '^\.github/CODEOWNERS$'
      - id: trailing-whitespace
        types_or: [c, inc, python, rst, yaml]
      - id: trailing-whitespace
        files: '^\.github/CODEOWNERS|\.(gram)$'

  - repo: https://github.com/python-jsonschema/check-jsonschema
    rev: 9f48a48aa91a6040d749ad68ec70907d907a5a7f  # frozen: 0.37.0
    hooks:
      - id: check-dependabot
      - id: check-github-workflows
      - id: check-readthedocs

  - repo: https://github.com/rhysd/actionlint
    rev: 393031adb9afb225ee52ae2ccd7a5af5525e03e8  # frozen: v1.7.11
    hooks:
      - id: actionlint

  - repo: https://github.com/zizmorcore/zizmor-pre-commit
    rev: b546b77c44c466a54a42af5499dcc0dcc1a3193f  # frozen: v1.22.0
    hooks:
      - id: zizmor

  - repo: https://github.com/sphinx-contrib/sphinx-lint
    rev: c883505f64b59c3c5c9375191e4ad9f98e727ccd  # frozen: v1.0.2
    hooks:
      - id: sphinx-lint
        args: [--enable=default-role]
        files: ^Doc/|^Misc/NEWS.d/

  - repo: local
    hooks:
      - id: blurb-no-space-c-api
        name: Check C API news entries
        language: fail
        entry: Space found in path, move to Misc/NEWS.d/next/C_API/
        files: Misc/NEWS.d/next/C API/20.*.rst

  - repo: local
    hooks:
      - id: blurb-no-space-core-and-builtins
        name: Check Core and Builtins news entries
        language: fail
        entry: Space found in path, move to Misc/NEWS.d/next/Core_and_Builtins/
        files: Misc/NEWS.d/next/Core and Builtins/20.*.rst

  - repo: meta
    hooks:
      - id: check-hooks-apply
      - id: check-useless-excludes
