Photo de Ron McClenny sur Unsplash
Souvent, lorsque les gens pensent à PHPStan, ils pensent généralement à améliorer la couverture des types. Ce n’est en réalité qu’une petite partie de ce dont PHPStan est capable. Dans cet article, nous apprendrons comment l'utiliser pour arrêter les régressions de mise à niveau.
Une régression de mise à niveau se produit lorsque vous disposez de fonctionnalités dans votre application dont vous souhaitez vous éloigner. Il peut s'agir de code dans votre application ou de code dans une dépendance que vous avez installée.
Souvent, lorsque nous essayons d'effectuer des mises à niveau, nous ne pouvons pas tout faire en une seule fois. Au lieu de cela, nous devons apporter de petits changements progressifs. De même, nous ne voulons pas que d’autres développeurs continuent à utiliser des méthodes et des propriétés obsolètes. Dans cette situation, ces nouveaux appels de méthode, etc. sont des régressions dans votre progression pour mettre à niveau votre application.
Pour commencer à lutter contre les régressions de mise à niveau, la première étape consiste à installer PHPStan si ce n’est pas déjà fait. Vous pouvez l'installer via Composer :
composer require --dev phpstan/phpstan
Ensuite, vous souhaiterez ajouter l'extension Deprecation Rules, qui permet spécifiquement de suivre l'utilisation des méthodes, propriétés et classes obsolètes dans votre base de code :
composer require --dev phpstan/phpstan-deprecation-rules
Une fois installé, vous pouvez configurer PHPStan pour utiliser les règles de dépréciation en l'ajoutant à votre fichier de configuration phpstan.neon :
includes: - vendor/phpstan/phpstan-deprecation-rules/rules.neon
L'exécution de PHPStan avec cette configuration signalera désormais toutes les méthodes, propriétés ou classes obsolètes dans votre base de code. Il s'agit d'une étape essentielle pour éviter les régressions de mise à niveau, car vous serez averti lorsque du code obsolète est utilisé. Vous pouvez ensuite refactoriser ces instances pour vous assurer que votre application évolue vers des fonctionnalités plus récentes et prises en charge.
Alors que l'extension Deprecation Rules détecte le code obsolète, l'extension Appels interdits offre un moyen de bloquer des appels de fonction spécifiques, des appels de méthode ou même des classes entières que vous ne souhaitez plus autoriser dans votre base de code. Ceci est particulièrement utile pour un contrôle plus précis de votre code, tel que le code qui n'a pas d'avertissement de dépréciation.
composer require --dev spaze/phpstan-disallowed-calls
Après l'installation, vous devrez le configurer dans votre fichier phpstan.neon. Voici un exemple de la façon dont vous pouvez interdire certains appels de méthodes ou fonctions :
includes: - vendor/phpstan/phpstan-deprecation-rules/rules.neon # add the extension - vendor/spaze/phpstan-disallowed-calls/extension.neon parameters: # You can see more example at https://github.com/spaze/phpstan-disallowed-calls/blob/main/docs/custom-rules.md disallowedMethodCalls: - method: 'PotentiallyDangerous\Logger::log()' # `function` is an alias of `method` message: 'use our own logger instead' errorTip: 'see https://our-docs.example/logging on how logging should be used'Begin writing your own rules disallowedFunctionCalls: - function: 'var_dump()' # `method` is an alias of `function` message: 'use logger instead'
Cette extension est assez complète, ce qui signifie que vous pourrez couvrir la majorité des scénarios. Bien sûr, il peut y avoir des situations qui ne fonctionnent pas et pour cela, le mieux est de commencer à apprendre à écrire vos propres règles.
C'est quelque chose que nous aborderons dans un autre article.
Utiliser PHPStan pour détecter les régressions de mise à niveau est un moyen intelligent de faciliter le processus de mise à niveau, en particulier dans les grandes équipes de développement. Appliquer PHPStan à votre configuration d'intégration continue
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!