# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

exclude: ^(\.txdev/|\.claude/)

default_install_hook_types:
  - pre-commit
repos:
  # ---------- Local hooks ----------
  - repo: local
    hooks:
      - id: check-asf-header
        name: check ASF Header
        entry: python tests/lint/check_asf_header.py --check
        language: python
        language_version: python3
        pass_filenames: false
        verbose: false
      - id: check-file-type
        name: check file types
        entry: python tests/lint/check_file_type.py
        language: python
        language_version: python3
        pass_filenames: false
        verbose: false
  # ---------- General file checks ----------
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v5.0.0
    hooks:
      - id: check-added-large-files
      - id: check-case-conflict
      - id: check-merge-conflict
      - id: check-symlinks
      - id: end-of-file-fixer
        exclude: ^3rdparty/
      - id: mixed-line-ending
        exclude: ^3rdparty/
      - id: requirements-txt-fixer
        exclude: ^docker/python/bootstrap
      - id: trailing-whitespace
        exclude: ^3rdparty/
      - id: check-yaml
      - id: check-toml

  # ---------- YAML lint ----------
  - repo: https://github.com/adrienverge/yamllint
    rev: v1.35.1
    hooks:
      - id: yamllint
        args:
          - --config-file
          - .yamllint.yaml
        exclude: ^\.github/

  # ---------- TOML format ----------
  - repo: https://github.com/ComPWA/taplo-pre-commit
    rev: v0.9.3
    hooks:
      - id: taplo-format

  # ---------- Python: ruff ----------
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.12.3
    hooks:
      - id: ruff-check
        types_or: [python, pyi, jupyter]
        args: [--fix]
      - id: ruff-format
        types_or: [python, pyi, jupyter]

  # ---------- C/C++: clang-format ----------
  - repo: https://github.com/pre-commit/mirrors-clang-format
    rev: "v20.1.8"
    hooks:
      - id: clang-format
        types_or: [c, c++, cuda, objective-c++]
        exclude: ^3rdparty/

  # ---------- Cython ----------
  - repo: https://github.com/MarcoGorelli/cython-lint
    rev: v0.16.7
    hooks:
      - id: cython-lint
        args: [--max-line-length=120]
      - id: double-quote-cython-strings
