# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v5.0.0
    hooks:
      - id: check-added-large-files
      - id: check-executables-have-shebangs
      - id: check-json
        exclude: '\.vscode/(cSpell|extensions)\.json' # cSpell.json and extensions.json use comments
      - id: check-shebang-scripts-are-executable
        exclude: '.+\.rs' # would be triggered by #![some_attribute]
      - id: check-symlinks
      - id: check-toml
      - id: check-yaml
        args: [ --allow-multiple-documents ]
      - id: destroyed-symlinks
      - id: end-of-file-fixer
      - id: mixed-line-ending
        args: [ --fix=lf ]
      - id: trailing-whitespace

  - repo: https://github.com/mozilla-l10n/moz-fluent-linter
    rev: v0.4.8
    hooks:
      - id: fluent_linter
        files: \.ftl$
        args: [--config, .github/fluent_linter_config.yml, src/uu/]

  - repo: local
    hooks:
      - id: rust-linting
        name: Rust linting
        description: Run cargo fmt on files included in the commit.
        entry: cargo +stable fmt --
        pass_filenames: true
        types: [file, rust]
        language: system
      - id: rust-clippy
        name: Rust clippy
        description: Run cargo clippy on files included in the commit.
        entry: cargo +stable clippy --workspace --all-targets --all-features -- -D warnings
        pass_filenames: false
        types: [file, rust]
        language: system
      - id: cspell
        name: Code spell checker (cspell)
        description: Run cspell to check for spelling errors (if available).
        entry: bash -c 'if command -v cspell >/dev/null 2>&1; then cspell --no-must-find-files -- "$@"; else echo "cspell not found, skipping spell check"; exit 0; fi' --
        pass_filenames: true
        language: system
