# 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.

# To use this, install the python package `pre-commit` and
# run once `pre-commit install`. This will setup a git pre-commit-hook
# that is executed on each commit and will report the linting problems.
# To run all hooks on all files use `pre-commit run -a`

repos:
  - repo: local
    hooks:
      - id: rat
        name: Release Audit Tool
        language: system
        entry: bash -c "git archive HEAD --prefix=apache-arrow/ --output=arrow-src.tar && ./dev/release/run-rat.sh arrow-src.tar"
        always_run: true
        pass_filenames: false
  - repo: https://github.com/hadolint/hadolint
    rev: v2.12.0
    hooks:
      - id: hadolint-docker
        name: Docker Format
        exclude: ^dev/.*$
  - repo: https://github.com/pycqa/flake8
    rev: 6.1.0
    hooks:
      - id: flake8
        name: Python Format
        files: ^(python|dev|integration)/
        types:
          - file
          - python
        exclude: vendored
        args: [--config, python/setup.cfg]
  - repo: https://github.com/MarcoGorelli/cython-lint
    rev: v0.12.5
    hooks:
      - id: cython-lint
        args: [--no-pycodestyle]
  - repo: https://github.com/pre-commit/mirrors-clang-format
    rev: v14.0.6
    hooks:
      - id: clang-format
        name: C++ Format
        types_or:
          - c++
          # - json
          # - proto
        files: >-
          ^cpp/
        exclude: >-
          (
          ?\.grpc\.fb\.(cc|h)$|
          ?\.pb\.(cc|h)$|
          ?_generated.*\.(cc|h)$|
          ?^cpp/src/arrow/vendored/|
          ?^cpp/src/generated/|
          ?^cpp/thirdparty/|
          )
  - repo: https://github.com/pre-commit/mirrors-clang-format
    rev: v14.0.6
    hooks:
      - id: clang-format
        name: C/GLib Format
        files: >-
          ^c_glib/
  - repo: https://github.com/pre-commit/mirrors-clang-format
    rev: v14.0.6
    hooks:
      - id: clang-format
        name: MATLAB (C++) Format
        files: >-
          ^matlab/src/cpp/
  - repo: https://github.com/pre-commit/mirrors-clang-format
    rev: v14.0.6
    hooks:
      - id: clang-format
        name: Python (C++) Format
        files: >-
          ^python/pyarrow/src/
        exclude: >-
          (
          ?\.grpc\.fb\.(cc|h)$|
          ?.pb\.(cc|h)$|
          ?^cpp/src/generated/|
          )
  - repo: https://github.com/pre-commit/mirrors-clang-format
    rev: v14.0.6
    hooks:
      - id: clang-format
        name: R (C++) Format
        files: >-
          ^r/src/
        exclude: >-
          (
          ?^r/src/arrowExports\.cpp$|
          )
  - repo: https://github.com/cheshirekow/cmake-format-precommit
    rev: v0.6.13
    hooks:
      - id: cmake-format
        name: CMake Format
        files: >-
          (
          ?^ci/.*/.*\.cmake$|
          ?^cpp/.*/.*\.cmake\.in$|
          ?^cpp/.*/.*\.cmake$|
          ?^cpp/.*/CMakeLists\.txt$|
          ?^go/.*/CMakeLists\.txt$|
          ?^java/.*/CMakeLists\.txt$|
          ?^matlab/.*/CMakeLists\.txt$|
          ?^python/.*/CMakeLists\.txt$|
          )
        exclude: >-
          (
          ?^cpp/cmake_modules/FindNumPy\.cmake$|
          ?^cpp/cmake_modules/FindPythonLibsNew\.cmake$|
          ?^cpp/cmake_modules/UseCython\.cmake$|
          ?^cpp/src/arrow/util/config\.h\.cmake$|
          )
  - repo: https://github.com/sphinx-contrib/sphinx-lint
    rev: v0.9.1
    hooks:
      - id: sphinx-lint
        files: ^docs/
        args: ['--disable', 'all', '--enable', 'trailing-whitespace,missing-final-newline', 'docs']
