Conventions
Les règles suivies dans tout le code mobile. Les respecter garde le code homogène et facile à relire.
Le code
| Règle | Exemple |
|---|---|
Fichiers en kebab-case | clock-button.tsx, use-today.ts |
Composants en PascalCase | ClockButton, TeamDetail |
Hooks commençant par use | useToday, useQuery |
Fonctions et variables en camelCase | fetchWorkingTimes, workedMinutes |
Constantes globales en MAJUSCULES | DAILY_TARGET_MINUTES, HOLD_MS |
Imports avec @/ | import { api } from '@/api/client' |
| Exports nommés pour les composants et fonctions | export function Button(...) |
export default seulement pour les écrans | expo-router l'exige |
| Styles en bas du fichier | const styles = StyleSheet.create({...}) |
Types partagés dans src/types/api.ts | User, WorkingTime |
L'ordre des imports
- Les bibliothèques (
expo-router,react,react-native,react-i18next). - Une ligne vide.
- Les fichiers de l'app avec
@/, par ordre alphabétique. - Une ligne vide, puis les imports relatifs (
./icon) s'il y en a.
Les commentaires
Pas de commentaires superflus. Le code doit se lire seul : des noms clairs plutôt qu'un commentaire qui explique un nom obscur. Un commentaire n'a sa place que pour une raison non évidente (une contrainte de l'API, un contournement).
La typographie
Jamais de tiret cadratin (le long tiret de ponctuation) dans le code ni dans les textes. On utilise une virgule, deux points, des parenthèses ou le point médian ·.
Les couleurs
Uniquement les couleurs de src/theme/colors.ts, issues de la maquette Figma. Jamais de valeur #... écrite directement dans un composant.
Les textes
Aucun texte visible écrit en dur dans un composant : tout passe par t('...'), avec la clé dans en.ts et fr.ts.
Les données
- Un écran n'appelle jamais
fetch. Il passe par une fonction desrc/api/. - Lire avec
useQuery, modifier avecuseAction. - Les dates de l'API sont converties dans
src/api/, jamais dans un écran. - Les erreurs sont lues avec
errorStatus,errorCode,fieldError, jamais en lisant la phrase de l'API.
Les dépendances
- Toujours
npx expo install <paquet>, jamaisnpm install <paquet>. - Préférer un module
expo-*à une bibliothèque tierce. - Avant d'ajouter une bibliothèque, vérifier qu'elle marche dans Expo Go. Sinon il faudra un « development build ».
Avant de commiter
npx tsc --noEmit
npx expo lintLes commits
Format Conventional Commits, en anglais, en minuscules :
feat(mobile): correction reviews, absences and week validation
fix(mobile): app icon and splash from the TimeManager logo
chore(mobile): Expo SDK 57 patch updates
docs(mobile): architecture READMEUn commit regroupe un ensemble cohérent (une fonctionnalité, une correction), pas un fichier isolé.