# Copyright 2024 The HuggingFace Inc. team. All rights reserved.
#
# Licensed 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.

default_language_version:
    python: python3.12

exclude: "tests/artifacts/.*\\.safetensors$"

repos:
  ##### Meta #####
  - repo: meta
    hooks:
      - id: check-useless-excludes
      - id: check-hooks-apply

   ##### General Code Quality & Formatting #####
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v6.0.0
    hooks:
      - id: check-added-large-files
        args: ['--maxkb=1024']
      - id: debug-statements
      - id: check-merge-conflict
      - id: check-case-conflict
      - id: check-yaml
      - id: check-toml
      - id: end-of-file-fixer
      - id: trailing-whitespace

  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.14.1
    hooks:
      - id: ruff-format
      - id: ruff
        args: [--fix, --exit-non-zero-on-fix]

  - repo: https://github.com/adhtruong/mirrors-typos
    rev: v1.38.1
    hooks:
      - id: typos
        args: [--force-exclude]

  - repo: https://github.com/asottile/pyupgrade
    rev: v3.21.0
    hooks:
    -   id: pyupgrade
        args: [--py312-plus]

  ##### Markdown Quality #####
  - repo: https://github.com/rbubley/mirrors-prettier
    rev: v3.6.2
    hooks:
      - id: prettier
        name: Format Markdown with Prettier
        types_or: [markdown, mdx]
        args: [--prose-wrap=preserve]
        # Jinja2 model-card templates use a .md extension but contain {% ... %} /
        # {{ ... }} tags that prettier's Markdown formatter mangles (e.g. table loops).
        #
        # docs/source/api/ holds the generated API reference. Its `[[autodoc]]` blocks restrict output
        # to an indented `- member` list, which prettier reads as a lazy paragraph continuation and
        # joins onto one line — silently turning a member list into part of the directive.
        exclude: ^(src/lerobot/templates/.*\.md|docs/source/api/.*\.mdx)$

  ##### Security #####
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.28.0
    hooks:
      - id: gitleaks

  - repo: https://github.com/woodruffw/zizmor-pre-commit
    rev: v1.15.2
    hooks:
      - id: zizmor

  - repo: https://github.com/PyCQA/bandit
    rev: 1.8.6
    hooks:
    - id: bandit
      args: ["-c", "pyproject.toml"]
      additional_dependencies: ["bandit[toml]"]

  ##### Static Analysis & Typing #####
  - repo: https://github.com/pre-commit/mirrors-mypy
    rev: v2.3.1
    hooks:
      - id: mypy
        args: [--config-file=pyproject.toml]
        pass_filenames: false
        types_or: [python, pyi, toml]
        files: ^(src/lerobot/|scripts/|utils/|conftest\.py$|setup\.py$|pyproject\.toml$)

  ##### Docstring Checks #####
  # - repo: https://github.com/akaihola/darglint2
  #   rev: v1.8.2
  #   hooks:
  #     - id: darglint2
  #       args: ["--docstring-style", "google", "-v", "2"]
  #       exclude: ^tests/.*$

  # interrogate runs in CI (quality.yml, doc-checks job) rather than here. Its 1.7.0 release still imports
  # the deprecated `py` package, which resolves against whatever `py` happens to be importable in
  # pre-commit's isolated env — on a machine with miniconda on the path that is a stray `py.py` and the
  # hook dies before it reads any config. The gate is the same either way; the CI step is just reliable.
  # - repo: https://github.com/econchick/interrogate
  #   rev: 1.7.0
  #   hooks:
  #     - id: interrogate
  #       args: ["--config=pyproject.toml"]
  #       pass_filenames: false
