|
| 1 | +# Guide PHPStan pour Jeedom |
| 2 | + |
| 3 | +## Installation locale |
| 4 | + |
| 5 | +1. Télécharger PHPStan : |
| 6 | +```bash |
| 7 | +wget https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar |
| 8 | +``` |
| 9 | + |
| 10 | +2. Mettre à jour les dépendances : |
| 11 | +```bash |
| 12 | +composer update --ignore-platform-reqs |
| 13 | +``` |
| 14 | + |
| 15 | +## Configuration |
| 16 | + |
| 17 | +Le fichier `phpstan.neon` à la racine du projet contient la configuration suivante : |
| 18 | + |
| 19 | +```yaml |
| 20 | +parameters: |
| 21 | + level: 1 |
| 22 | + paths: |
| 23 | + - core |
| 24 | + - desktop |
| 25 | + - install |
| 26 | + - mobile |
| 27 | + excludePaths: |
| 28 | + - vendor/* |
| 29 | + tmpDir: .phpstan.cache |
| 30 | + baseline: phpstan-baseline.neon |
| 31 | + reportUnmatchedIgnoredErrors: false |
| 32 | + |
| 33 | +includes: |
| 34 | + - phpstan-baseline.neon |
| 35 | +``` |
| 36 | +
|
| 37 | +Notes importantes : |
| 38 | +- Niveau d'analyse : 1 / 10 (0 = minimum, 10 = maximum) |
| 39 | +- Le baseline permet d'ignorer les erreurs existantes |
| 40 | +- Les erreurs corrigées sont automatiquement retirées des erreurs détectées |
| 41 | +
|
| 42 | +## Utilisation quotidienne |
| 43 | +
|
| 44 | +### Lancer l'analyse |
| 45 | +```bash |
| 46 | +php phpstan.phar analyse --configuration phpstan.neon |
| 47 | +``` |
| 48 | + |
| 49 | +### Types d'erreurs courantes et solutions |
| 50 | + |
| 51 | +1. **Variable might not be defined** : |
| 52 | +```php |
| 53 | +// Erreur |
| 54 | +function maFonction() { |
| 55 | + if($condition) { |
| 56 | + $variable = 'valeur'; |
| 57 | + } |
| 58 | + echo $variable; // Erreur : variable non définie si condition fausse |
| 59 | +} |
| 60 | + |
| 61 | +// Solution |
| 62 | +function maFonction() { |
| 63 | + $variable = null; // Initialisation par défaut |
| 64 | + if($condition) { |
| 65 | + $variable = 'valeur'; |
| 66 | + } |
| 67 | + echo $variable; |
| 68 | +} |
| 69 | +``` |
| 70 | + |
| 71 | +2. **Method X not found in class Y** : |
| 72 | +```php |
| 73 | +// Erreur |
| 74 | +$object->methodQuiNexistePas(); |
| 75 | + |
| 76 | +// Solution |
| 77 | +// Vérifier si la méthode existe dans la classe |
| 78 | +// Ou utiliser une interface/classe abstraite pour définir le contrat |
| 79 | +``` |
| 80 | + |
| 81 | +3. **Cannot call method X on mixed** : |
| 82 | +```php |
| 83 | +// Erreur |
| 84 | +$result = getData(); // getData() retourne mixed |
| 85 | +$result->method(); // Erreur : impossible d'appeler une méthode sur mixed |
| 86 | + |
| 87 | +// Solution |
| 88 | +if (is_object($result)) { |
| 89 | + $result->method(); |
| 90 | +} |
| 91 | +``` |
| 92 | + |
| 93 | +## Cas particuliers |
| 94 | + |
| 95 | +### Ignorer une erreur spécifique |
| 96 | +Si une erreur ne peut pas être corrigée ou doit être ignorée, ajoutez un commentaire PHPStan : |
| 97 | +```php |
| 98 | +/** @phpstan-ignore-next-line */ |
| 99 | +$resultat = codeProblematiqueQuiNeDoitPasEtreModifie(); |
| 100 | +``` |
| 101 | + |
| 102 | +### Générer un nouveau baseline |
| 103 | +Si de nombreuses erreurs existantes doivent être ignorées : |
| 104 | +```bash |
| 105 | +php phpstan.phar analyse --configuration phpstan.neon --generate-baseline |
| 106 | +``` |
| 107 | + |
| 108 | +## Intégration continue |
| 109 | + |
| 110 | +### Vérification du code |
| 111 | + |
| 112 | +Le workflow GitHub Actions vérifie automatiquement le code à chaque push et pull request sur la branche alpha. En cas d'échec : |
| 113 | + |
| 114 | +1. Consultez les logs de l'action pour voir les erreurs |
| 115 | +2. Reproduisez l'analyse en local |
| 116 | +3. Corrigez les erreurs ou mettez à jour le baseline si nécessaire |
| 117 | + |
| 118 | +### Mise à jour automatique du baseline |
| 119 | + |
| 120 | +Un processus automatique a été mis en place pour maintenir le baseline à jour : |
| 121 | + |
| 122 | +1. Après chaque merge sur alpha, le système vérifie si des erreurs du baseline peuvent être supprimées |
| 123 | +2. Si des erreurs ont été corrigées et peuvent être retirées du baseline : |
| 124 | + - Une nouvelle branche `update-phpstan-baseline` est créée |
| 125 | + - Une Pull Request est automatiquement ouverte |
| 126 | + - La PR contient uniquement la mise à jour du fichier `phpstan-baseline.neon` |
| 127 | +3. Cette PR peut être revue et mergée comme toute autre PR |
| 128 | + |
| 129 | +👉 Note : Il n'est pas nécessaire de mettre à jour le baseline manuellement, le système automatique s'en charge lorsque des erreurs sont corrigées. |
| 130 | + |
| 131 | +## Bonnes pratiques |
| 132 | + |
| 133 | +- Exécutez PHPStan localement avant de commiter |
| 134 | +- Corrigez les erreurs plutôt que de les ignorer quand c'est possible |
| 135 | +- Pour les nouvelles classes/méthodes, essayez de ne pas générer de nouvelles erreurs |
| 136 | +- Commentez le code clairement quand vous devez ignorer une erreur |
| 137 | +- Laissez le système automatique gérer la mise à jour du baseline |
| 138 | +- Revoyez les PRs de mise à jour du baseline pour vérifier que les erreurs retirées ont bien été corrigées intentionnellement |
| 139 | + |
| 140 | +--- |
| 141 | + |
| 142 | +Besoin d'aide supplémentaire ? Consultez la [documentation officielle de PHPStan](https://phpstan.org/user-guide/getting-started). |
0 commit comments