Meilleures pratiques pour les règles MDC
Les règles MDC (Model-Driven Code) sont un outil puissant pour maintenir la qualité et la cohérence du code. Ce guide présente les meilleures pratiques pour écrire et gérer ces règles.
Bases des règles MDC
Structure de base
rule:
name: "Nom de la règle"
description: "Description de la règle"
pattern: "Motif à rechercher"
message: "Message d'erreur"
severity: "error|warning|info"
Syntaxe de base
# Règle simple
rule:
name: "Vérification des imports"
pattern: "import.*from.*"
message: "Utilisez des imports nommés"
# Règle avec conditions
rule:
name: "Longueur de fonction"
pattern: "function.*{"
conditions:
- "lines > 50"
message: "La fonction est trop longue"
Meilleures pratiques
1. Nommage des règles
# Bon
rule:
name: "no-console-log"
description: "Interdit l'utilisation de console.log"
# À éviter
rule:
name: "rule1"
description: "Une règle"
2. Descriptions claires
# Bon
rule:
name: "no-var"
description: "Utilisez 'let' ou 'const' au lieu de 'var' pour une meilleure portée des variables"
# À éviter
rule:
name: "no-var"
description: "Ne pas utiliser var"
3. Correspondance de motifs
# Utiliser des motifs précis
rule:
pattern: "\\bvar\\s+\\w+\\s*="
# Éviter les motifs trop généraux
rule:
pattern: "var"
Techniques avancées
1. Transformations conditionnelles
rule:
name: "convert-to-arrow"
pattern: "function\\s+\\w+\\s*\\([^)]*\\)\\s*{"
transform:
type: "arrow"
conditions:
- "!usesThis"
- "!usesArguments"
2. Contexte de code
rule:
name: "react-hooks"
pattern: "useEffect\\("
context:
required:
- "import.*react"
forbidden:
- "class.*extends.*Component"
3. Validation personnalisée
rule:
name: "custom-validation"
pattern: "\\w+"
validate:
function: "customValidator"
params:
maxLength: 50
allowedChars: "[a-zA-Z0-9_]"
Test des règles
1. Tests unitaires
test:
rule: "no-console-log"
cases:
- code: "console.log('test')"
shouldFail: true
- code: "logger.info('test')"
shouldFail: false
2. Tests d'intégration
test:
rule: "react-hooks"
files:
- "src/components/TestComponent.tsx"
- "src/hooks/useCustomHook.ts"
expectedErrors: 2
Gestion des règles
1. Organisation
# Grouper les règles par catégorie
categories:
- name: "React"
rules:
- "react-hooks"
- "react-props"
- name: "TypeScript"
rules:
- "no-any"
- "strict-null"
2. Versionnement
rule:
name: "no-console-log"
version: "1.0.0"
deprecated: false
replacement: "use-logger"
Dépannage
1. Erreurs courantes
# Problème : Motif trop général
rule:
pattern: ".*" # Trop général
# Solution : Motif plus spécifique
rule:
pattern: "\\bconsole\\.log\\("
2. Débogage
rule:
name: "debug-rule"
pattern: "\\w+"
debug: true
logLevel: "verbose"
Optimisation des performances
1. Optimisation des motifs
# Utiliser des motifs optimisés
rule:
pattern: "(?=.*error).*" # Lookahead positif
# Éviter les motifs coûteux
rule:
pattern: ".*error.*" # Moins efficace
2. Gestion des ressources
rule:
name: "resource-intensive"
pattern: "complex-pattern"
options:
maxMatches: 100
timeout: 5000
Considérations de sécurité
1. Validation des entrées
rule:
name: "input-validation"
pattern: "\\w+"
validate:
sanitize: true
maxLength: 100
allowedChars: "[a-zA-Z0-9_-]"
2. Contrôle d'accès
rule:
name: "sensitive-data"
pattern: "password|token|key"
access:
roles: ["admin", "security"]
audit: true
Conclusion
Les règles MDC sont un outil puissant pour maintenir la qualité du code. En suivant ces meilleures pratiques, vous pouvez créer des règles efficaces et maintenables.
Ressources supplémentaires :
Dernière mise à jour : Février 2025 - Ce guide couvre Cursor version 0.43.