fail_fast: true
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.30.0
hooks:
- id: gitleaks
- repo: https://github.com/shellcheck-py/shellcheck-py
rev: v0.10.0.1
hooks:
- id: shellcheck
- repo: https://github.com/compilerla/conventional-pre-commit
rev: v3.6.0
hooks:
- id: conventional-pre-commit
stages: [commit-msg]
args: []
- repo: local
hooks:
- id: cargo-fmt
name: cargo fmt
entry: mise exec -- cargo fmt --all --
language: system
types: [rust]
pass_filenames: false
- id: cargo-lock-check
name: check Cargo.lock is up-to-date
entry: sh -c 'cargo metadata --locked --format-version 1 --no-deps >/dev/null'
language: system
files: ^Cargo\.(toml|lock)$
pass_filenames: false
stages: [pre-commit]
- id: actionlint
name: actionlint (GitHub Actions)
entry: actionlint
language: system
files: ^\.github/workflows/.*\.ya?ml$
pass_filenames: false
stages: [pre-commit]
- repo: builtin
hooks:
- id: trailing-whitespace
exclude: \.md$|tests/inline_config_test\.rs$|tests/output_format_integration_tests\.rs$|tests/lsp_editor_integration_tests\.rs$|tests/utils_markdown_edge_cases\.rs$
- id: end-of-file-fixer
exclude: \.md$|rumdl\.schema\.json$
- id: check-yaml
- id: check-toml
- id: check-json
- id: check-merge-conflict
- id: check-case-conflict
- id: mixed-line-ending
args: [--fix=lf]
- repo: local
hooks:
- id: rumdl
name: rumdl check
entry: cargo run --quiet -- check
language: system
files: \.md$
exclude: ^(test_tmp|benchmark/test-data|docs/temp|__tests__|CHANGELOG\.md)
pass_filenames: true
require_serial: true
- repo: local
hooks:
- id: cargo-test-full
name: cargo test (full suite)
entry: mise exec -- make test-push
language: system
types: [rust]
pass_filenames: false
stages: [pre-push]
- id: cargo-lint-full
name: cargo clippy (all targets)
entry: mise exec -- make lint
language: system
types: [rust]
pass_filenames: false
stages: [pre-push]
- id: cargo-doc-check
name: cargo doc (check)
entry: mise exec -- cargo doc --no-deps --all-features
language: system
types: [rust]
pass_filenames: false
stages: [pre-push]
- id: cargo-lock-check-push
name: verify Cargo.lock is committed and up-to-date
entry: sh -c 'cargo metadata --locked --format-version 1 --no-deps >/dev/null'
language: system
files: ^Cargo\.(toml|lock)$
pass_filenames: false
stages: [pre-push]
- id: complexity-check
name: check for O(n²) regressions
entry: mise exec -- make test-complexity
language: system
types: [rust]
pass_filenames: false
stages: [pre-push]
- id: schema-check
name: check JSON schema is up-to-date
entry: mise exec -- make check-schema
language: system
types: [rust]
pass_filenames: false
stages: [pre-push]