Code style
TypeScript strict, imports, Biome, Tailwind
TypeScript
- Strict mode activé —
strict: truedans tsconfig - Pas de
any— utiliserunknownsi le type est inconnu - Inférence maximale — ne pas annoter quand TypeScript peut inférer
- Pas de
assauf nécessité — les assertions de type masquent les bugs
// ✅ Bon — inférence
const count = reports.length;
// ❌ Mauvais — annotation inutile
const count: number = reports.length;
// ✅ Bon — type guard
function isEstablishmentAdmin(user: User): user is EstablishmentAdmin {
return user.role === "establishment_admin";
}
// ❌ Mauvais — assertion
const admin = user as EstablishmentAdmin;Imports
- Imports auto-organisés par Biome (
organizeImports: "on") - Ordre : packages externes → packages internes (
@wcare/*) → imports relatifs - Pas d'index barrels dans les modules — importer le fichier directement
// ✅ Bon
import { Button } from "@wcare/ui/components/button";
import { createEstablishmentSchema } from "../schemas/establishment.schema";
// ❌ Mauvais — barrel import
import { Button } from "@wcare/ui";Biome
Configuration dans biome.json à la racine :
- Formatter : tabs, double quotes
- Linter : recommended rules + strictes
- Tailwind :
useSortedClassesaveccn,clsx,cva
# Vérifier et auto-fix
bun run checkTailwind CSS
- Classes triées automatiquement par Biome
- Utiliser
cn()pour combiner des classes conditionnelles - Design system Neo-brutalism — respecter les tokens définis dans
globals.css - Pas de styles inline — tout passe par les classes Tailwind
- Pas de
@applysauf dansglobals.csspour les styles de base
Commentaires
- Pas de commentaires évidents — le code doit être auto-documenté
- Commenter le pourquoi, pas le quoi
- Pas de TODO/FIXME sans issue associée
// ✅ Bon — explique le pourquoi
// Fenêtre de 24h pour le redirect graceful : le temps que les QR
// physiques avec l'ancien token soient re-scannés
const REDIRECT_GRACE_PERIOD_HOURS = 24;
// ❌ Mauvais — commente l'évidence
// Vérifie si le token est expiré
if (token.expiresAt < new Date()) { ... }Erreurs
- Errors explicites avec des messages clairs
- Pas de
catchvide — toujours logger ou remonter - TRPCError pour les erreurs API avec le bon code HTTP
- Pas de
console.logen prod — utiliser un logger structuré