146 lines
3.2 KiB
Markdown
146 lines
3.2 KiB
Markdown
---
|
|
name: checking-code-quality
|
|
description: Executes code quality checks (format:check, ESLint, Jest) before each commit according to leapmultix project standards
|
|
allowed-tools: Read, Grep, Glob, Bash
|
|
---
|
|
|
|
# Code Quality Gate
|
|
|
|
Garantit code respecte standards avant commit (format, lint, tests).
|
|
|
|
## Table des matières
|
|
|
|
- [Quand utiliser](#quand-utiliser)
|
|
- [Workflow OBLIGATOIRE (séquence)](#workflow-obligatoire-séquence)
|
|
- [Standards essentiels](#standards-essentiels)
|
|
- [ESLint suppressions](#eslint-suppressions)
|
|
- [Scripts disponibles](#scripts-disponibles)
|
|
- [Configuration](#configuration)
|
|
- [Conventions commit](#conventions-commit)
|
|
- [Checklist](#checklist)
|
|
- [En cas de doute](#en-cas-de-doute)
|
|
|
|
## Quand utiliser
|
|
|
|
- **TOUJOURS** avant chaque commit
|
|
- Avant créer PR
|
|
- Après modification JavaScript/CSS
|
|
- À la demande
|
|
|
|
## Workflow OBLIGATOIRE (séquence)
|
|
|
|
1. **Formatage (CRITIQUE) :**
|
|
|
|
```bash
|
|
npm run format:check
|
|
# Si ✗ → npm run format
|
|
```
|
|
|
|
2. **Linting :**
|
|
|
|
```bash
|
|
npm run lint
|
|
# Si ✗ → npm run lint:fix
|
|
```
|
|
|
|
3. **Tests :**
|
|
|
|
```bash
|
|
npm test
|
|
```
|
|
|
|
4. **Couverture (recommandé) :**
|
|
```bash
|
|
npm run test:coverage
|
|
```
|
|
|
|
**Ou tout-en-un :** `npm run verify` (lint + test + coverage)
|
|
|
|
## Standards essentiels
|
|
|
|
**JavaScript :**
|
|
|
|
- Pas variables inutilisées (supprime ou eslint-disable avec justification)
|
|
- Pas catch blocks vides (logger erreur)
|
|
- Utiliser security-utils pour DOM (`appendSanitizedHTML()`, `setSafeMessage()`)
|
|
- Complexité cognitive < 15 (découpe fonctions complexes)
|
|
|
|
**CSS :**
|
|
|
|
- Notation couleur moderne : `rgb(255 255 255 / 0.9)` pas `rgba(...)`
|
|
|
|
**Sécurité :**
|
|
|
|
- Jamais `innerHTML` données externes (utiliser security-utils)
|
|
- Scripts externes: `crossorigin="anonymous"`
|
|
- Integrity hashes bibliothèques (pas analytics, auto-update)
|
|
- Valider entrées externes
|
|
|
|
## ESLint suppressions
|
|
|
|
**Ligne :** `// eslint-disable-next-line rule -- Justification`
|
|
|
|
**Bloc :** `/* eslint-disable rule */ ... /* eslint-enable rule */`
|
|
|
|
**Règle :** Toujours justifier avec `--` pourquoi sécurisé/intentionnel.
|
|
|
|
## Scripts disponibles
|
|
|
|
- `npm test` - Tests
|
|
- `npm run test:watch` - Mode watch
|
|
- `npm run test:coverage` - Couverture
|
|
- `npm run verify:dead-code` - Code mort
|
|
- `npm run analyze:*` - Globals, jsdoc, dependencies
|
|
|
|
## Configuration
|
|
|
|
- `eslint.config.js` - Règles ESLint
|
|
- `.prettierrc` - Formatage
|
|
- `.stylelintrc.json` - CSS
|
|
- `jest.config.cjs` - Tests
|
|
|
|
## Conventions commit
|
|
|
|
- Impératif : "Fix", "Add", "Refactor"
|
|
- Concis, descriptif
|
|
- Jamais mentionner AI/assistants
|
|
|
|
## Checklist
|
|
|
|
- [ ] format:check passe
|
|
- [ ] lint passe
|
|
- [ ] tests passent
|
|
- [ ] coverage acceptable
|
|
- [ ] Pas console.log oubliés
|
|
- [ ] Pas variables inutilisées
|
|
- [ ] security-utils pour DOM
|
|
- [ ] Message descriptif
|
|
- [ ] Pas secrets/API keys
|
|
|
|
## En cas de doute
|
|
|
|
**Règles absolues :**
|
|
|
|
1. `npm run format:check` TOUJOURS d'abord
|
|
2. Ne JAMAIS committer si échec
|
|
3. Ne JAMAIS désactiver sans justification
|
|
4. Exécuter localement AVANT pusher
|
|
|
|
**Workflow minimal :**
|
|
|
|
```bash
|
|
npm run format:check && npm run lint && npm test
|
|
```
|
|
|
|
**Workflow complet :**
|
|
|
|
```bash
|
|
npm run verify
|
|
```
|
|
|
|
**Fichiers clés :**
|
|
|
|
- CLAUDE.md - Conventions
|
|
- eslint.config.js - Règles
|
|
- security-utils.js - DOM sécurisé
|