# Hooks locaux (language: system) plutot que les miroirs pre-commit # habituels (astral-sh/ruff-pre-commit, pre-commit/mirrors-mypy, # pre-commit/mirrors-eslint...) : ce projet a deja un environnement # Python (requirements-dev.txt) et un node_modules/ (package.json) bien # a lui — repartir sur un environnement ISOLE et RE-TELECHARGE par # pre-commit dupliquerait exactement les memes outils/versions pour rien # (et serait plus lent, plus fragile hors ligne). Voir CODE_QUALITY.md # pour l'installation prealable (`pip install -r requirements-dev.txt` # + `npm install`), necessaire pour que ces hooks trouvent les # executables. # # Chaque hook est bloquant (aucune regle desactivee "pour ne pas casser # le build", demande explicite) — un commit est refuse si un outil # trouve un probleme, jusqu'a ce que la Phase 3 du plan qualite ait # nettoye l'existant. # # eslint/stylelint : entry appelle `node ` directement plutot # que `npx eslint` ou le shim node_modules/.bin/eslint(.cmd) — ces deux # dernieres formes font passer pre-commit par cmd.exe pour lancer un # executable Windows (.cmd) ou un script a shebang POSIX (#!/bin/sh), # et pre-commit resout mal cmd.exe/sh depuis ce contexte (bug constate # sous Windows). Appeler `node` directement sur le fichier JS du package # evite tout intermediaire shell. repos: - repo: local hooks: - id: ruff-check name: Ruff (lint Python) entry: ruff check language: system types: [python] - id: ruff-format name: Ruff (formatage Python) entry: ruff format --check language: system types: [python] - id: mypy name: Mypy (typage strict Python) entry: mypy . language: system types: [python] pass_filenames: false - id: vulture name: Vulture (code mort Python) entry: vulture language: system pass_filenames: false - id: bandit name: Bandit (securite Python) entry: bandit -c pyproject.toml -r ai auth core db filters publish routes screens scripts app.py build_css.py language: system pass_filenames: false - id: import-linter name: import-linter (contrats d'architecture Python) entry: lint-imports language: system pass_filenames: false - id: djlint name: djLint (templates Jinja) entry: djlint templates language: system pass_filenames: false - id: eslint name: ESLint (JS) entry: node node_modules/eslint/bin/eslint.js language: system files: ^static/js/.*\.js$ - id: stylelint name: Stylelint (CSS) entry: node node_modules/stylelint/bin/stylelint.mjs language: system files: \.css$