# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
ci:
  autofix_prs: false
  autofix_commit_msg: "[Lint]: [pre-commit.ci] auto fixes [...]"
  autoupdate_commit_msg: "[CI] [pre-commit.ci] autoupdate"
  autoupdate_schedule: monthly
default_stages: [pre-commit, pre-push, manual]
exclude: '^(build|3rdparty)/.*$'  # exclude build and 3rdparty directories
repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v6.0.0
    hooks:
      - id: check-symlinks
      - id: destroyed-symlinks
      # FIXME: enable these hooks
      # - id: trailing-whitespace
      # - id: end-of-file-fixer
      - id: check-added-large-files
      - id: check-merge-conflict
        fail_fast: true
      # FIXME: enable these hooks
      # - id: check-executables-have-shebangs
      # - id: check-shebang-scripts-are-executable
      - id: detect-private-key
      - id: check-yaml
      - id: check-toml
      - id: check-ast
        fail_fast: true
      - id: debug-statements
      - id: file-contents-sorter
        args: [--ignore-case]
        files: ^docs/spelling_wordlist\.txt$
  - repo: https://github.com/pre-commit/mirrors-clang-format
    rev: v21.1.2  # sync with requirements-lint.txt
    hooks:
      - id: clang-format
        exclude: |
          (?ix)(
            ^.+\.(cu|cuh)$|
            ^.+\.json$
          )
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.14.3  # sync with requirements-lint.txt
    hooks:
      - id: ruff-check
        args: [--fix, --exit-non-zero-on-fix]
  - repo: https://github.com/google/yapf
    rev: v0.43.0  # sync with requirements-lint.txt
    hooks:
      - id: yapf
        name: yapf-multiproc-bugfix
        # yapf is not multiprocess safe, so we run a dummy yapf first.
        args: [--in-place, docs/conf.py]
        always_run: true
        pass_filenames: false
      - id: yapf
        args: [--recursive, --in-place]
  - repo: https://github.com/codespell-project/codespell
    rev: v2.4.1  # sync with requirements-lint.txt
    hooks:
      - id: codespell
        additional_dependencies: [".[toml]"]
        exclude: |
          (?x)(
            ^.+\.(cpp|hpp|cxx|cc|c|h|cu|cuh)$|
            ^.+\.svg$|
            ^.*\brequirements\b.*\.txt$
          )
