qa v1.3.2
Quality assurance : PHPStan, tests, linters.
Installation
/plugin install qa@atournayreSkills Disponibles
Le plugin qa fournit 2 skills (format natif Claude Code) :
Task Management System
Nouveauté v1.2.4 : Le skill PHPStan intègre le task management system pour suivre la boucle de résolution.
Skill avec task management
| Skill | Nombre de tâches | Type de workflow |
|---|---|---|
qa:phpstan | 5 tâches | Boucle itérative avec auto-fix (max 10 itérations) |
Fonctionnalités
- Progression visible : Suivi de chaque phase (vérification → analyse → boucle → rapport)
- Statuts clairs : pending → in_progress → completed
- Boucle longue durée : La tâche #4 reste
in_progresspendant toutes les itérations - Rapport détaillé : Nombre d'erreurs corrigées, taux de succès, itérations effectuées
/qa:phpstan
🔹 Skill disponible : phpstan-resolver
Résout les erreurs PHPStan en utilisant l'agent phpstan-error-resolver.
Usage :
/qa:phpstanWorkflow :
- Exécute PHPStan niveau 9 (format JSON)
- Parse et groupe les erreurs par fichier
- Boucle de résolution (max 10 itérations) :
- Batch de 5 erreurs par fichier par itération
- Délégation à agent
@phpstan-error-resolver - Corrections via Edit tool
- Re-exécution PHPStan pour vérification
- Détection de stagnation (erreurs qui ne diminuent plus)
- Rapport final avec :
- Nombre erreurs initial/final
- Erreurs corrigées
- Taux de succès
- Fichiers avec erreurs restantes
Types d'erreurs résolues :
Types stricts :
// Avant
public function process($data) { }
// Après
public function process(array $data): void { }Annotations generics :
// Avant
/** @var Collection */
private Collection $items;
// Après
/** @var Collection<int, Item> */
private Collection $items;Array shapes :
// Avant
/** @return array */
public function getData(): array { }
// Après
/** @return array{id: int, name: string} */
public function getData(): array { }Collections Doctrine :
// Avant
/** @var Collection */
private Collection $users;
// Après
/**
* @var Collection<int, User>
* @phpstan-var Collection<int, User>
*/
private Collection $users;Null safety :
// Avant
public function getName(): ?string
{
return $this->user->getName();
}
// Après
public function getName(): ?string
{
if ($this->user === null) {
return null;
}
return $this->user->getName();
}Rapport :
🔍 Analyse PHPStan
Erreurs trouvées : 15
- Types stricts : 5
- Generics : 4
- Array shapes : 3
- Null safety : 3
Résolution :
✅ 15/15 erreurs corrigées
Vérification :
✅ PHPStan niveau 9 passe/qa:elegant-objects
🔹 Skill disponible : elegant-objects
Vérifie la conformité du code PHP aux principes Elegant Objects de Yegor Bugayenko.
Usage :
/qa:elegant-objects [fichier.php]Arguments :
fichier.php(optionnel) : Fichier spécifique à analyser- Sans argument : analyse tous les fichiers PHP modifiés dans la branche
Exemples :
# Fichier spécifique
/qa:elegant-objects src/Domain/User.php
# Tous les fichiers modifiés
/qa:elegant-objectsRègles vérifiées :
Conception des classes :
- Classes
final(sauf abstraites) - Max 4 attributs par classe
- Pas de getters/setters
- Pas de méthodes statiques
- Pas de noms en -er (Manager, Handler, Helper...)
- Constructeur unique avec affectations simples
Méthodes :
- Pas de retour
null - Pas d'argument
null - Corps sans lignes vides ni commentaires inline
- Séparation CQRS (commandes void / queries avec retour)
Style :
- Messages d'erreur sans point final
- Fail fast (exceptions au plus tôt)
Tests :
- Une assertion par test
- Pas de setUp/tearDown
- Noms français décrivant le comportement
Rapport :
## Score de conformité Elegant Objects
Score global: 75/100
## Violations critiques (bloquantes)
### Classes non-final
- **Fichier:** src/User.php:12
- **Problème:** Classe User non déclarée final
- **Suggestion:** final class User
## Statistiques
- Fichiers analysés: 5
- Classes analysées: 8
- Total violations: 12Skills Disponibles
phpstan-resolver
Localisation : skills/phpstan-resolver/
Skill spécialisé pour la résolution automatique des erreurs PHPStan. Utilisé automatiquement par /qa:phpstan.
Fonctionnalités :
- Boucle de résolution itérative (max 10 itérations)
- Batch processing (5 erreurs/fichier/itération)
- Détection de stagnation automatique
- Rapport détaillé avec taux de succès
- Support PHPStan format JSON
- Délégation à agent
@phpstan-error-resolverpour corrections
Configuration :
ERROR_BATCH_SIZE: 5MAX_ITERATIONS: 10PHPSTAN_CONFIG: phpstan.neon ou phpstan.neon.dist
Modèle : opus-4
Outils : Task, Bash, Read, Edit, Grep, Glob
elegant-objects
Localisation : skills/elegant-objects/
Skill spécialisé pour vérifier la conformité aux principes Elegant Objects de Yegor Bugayenko.
Fonctionnalités :
- Analyse fichier spécifique ou fichiers modifiés dans la branche
- Règles de conception (final, max 4 attributs, pas de getters/setters)
- Règles de méthodes (pas de null, CQRS)
- Règles de style (messages, fail fast)
- Règles de tests (une assertion, noms français)
- Score de conformité sur 100
- Rapport détaillé avec suggestions de correction
Calcul du score :
- Violation critique : -10 points
- Violation majeure : -5 points
- Recommandation : -2 points
- Score de base : 100
Modèle : sonnet
Outils : Bash, Read, Grep, Glob
Agent Spécialisé
phpstan-error-resolver
Agent proactif qui :
- Parse output PHPStan
- Identifie patterns d'erreurs
- Applique corrections appropriées
- Vérifie conformité Elegant Objects
- Respecte immutabilité et types stricts
Outils disponibles :
- Read
- Edit
- Grep
- Glob
- Bash (phpstan)
Configuration PHPStan
phpstan.neon recommandé :
parameters:
level: 9
paths:
- src
strictRules:
disallowedLooseComparison: true
booleansInConditions: true
uselessCast: true
checkMissingIterableValueType: true
checkGenericClassInNonGenericObjectType: trueWorkflow Recommandé
# 1. Run PHPStan
vendor/bin/phpstan analyse
# 2. Si erreurs
/qa:phpstan
# 3. Vérification automatique
# Agent run PHPStan à nouveau
# 4. Commit
/git:commit "refactor: fix PHPStan level 9 errors"Best Practices
Avant correction :
- Comprendre l'erreur
- Vérifier impact
- Tests existants passent
Pendant correction :
- Corrections minimales
- Respect Elegant Objects
- Types stricts
- Pas de
@phpstan-ignore
Après correction :
- PHPStan niveau 9 passe
- Tests passent
- Code review
Extensions Futures
- PHPUnit coverage
- PHP-CS-Fixer
- Psalm integration
- Rector suggestions
Licence
MIT