PHPSTORM Configuration des ‘Quality tools’ dans une image Docker

Voici une question que je me suis posée récemment. Habituellement j’installe directement les outils de QA sur mon host ou directement dans l’image Docker. Si les outils sont installés sur mon host, pas de problèmes pour configurer PhpStorm.

Si les outils sont directement configurés dans l’image Docker, pas de problèmes non plus pour l’utiliser à l’intérieur de l’image. En revanche comment peut on allier la puissance de PhpStorm et de Docker pour lier les deux ?

Voici donc comment procéder pour l’installation de php_codesniffer, Mess Detector, CS Fixer, PSalm, PhpStan.

image

Pour le besoin de notre article je vous donne quelques armes pour l’ajouter à votre Dockerfile ou bien directement en créer un spécialement pour votre workflow de développement. Personnellement j’ai un Dockerfile pour gérer l’ensemble des versions de PHP et dans lequel j’y ajoute l’ensemble des outils dont j’ai besoin pour monter une stack de dév.

FROM php:7.4.31-apache-buster

ARG COMPOSER_HOME=/composer

RUN composer global require squizlabs/php_codesniffer
RUN composer global require phpmd/phpmd
RUN composer global require friendsofphp/php-cs-fixer  --with-all-dependencies
RUN composer global require vimeo/psalm
RUN composer global require phpstan/phpstan

Vous pouvez directement utiliser une image spéciale pour le CLI. Perso j’utilise une image avec apache. Du coup je monte mon image ‘qa’ quand j’en ai besoin en surchargeant l’entrypoint par défaut et en passant une commande infinie.

version: "3.8"
services:
    qa:
        image: 'devpartitech/php:7.4-apache'
        tty: true
        environment:
            COMPOSER_HOME: '/composer'
        volumes:
          - "./:/var/www/"
        entrypoint: ["/bin/bash", "-c"]
        command: "tail -f /dev/null"

Vous allez donc devoir configurer des interpréteurs. Pour cela rendez vous dans Settings > Quality Tools et nous allons choisir le premier de la liste PHP_Code_Sniffer.

image-2

Une fois dans l’interface de configuration des Interpréteurs cliquez sur le « + » et choisissez « From Docker« 

image-3

Ce n’est qu’un exemple que vous pourrez adapter à votre guise. Je vais utiliser mon Docker Compose directement.

image-4
image-5

Une fois créé vous aurez accès à la page de configuration. Avant de valider pensez à exécuter le reload de votre config qu’il prenne en compte votre exécutable PHP.

image-6
image-7

Si comme moi vous avez choisi « /composer » comme COMPOSER_HOME alors vous trouverez l’ensemble des outils installés dans /composer/vendor/bin. Vous pouvez donc renseigner (adaptez si besoin) les valeurs suivantes :
PHP_Code_Sniffer path : /composer/vendor/bin/phpcs

Path to phpcbf : /composer/vendor/bin/phpcbf

Validez pour bien vérifier que tout est en ordre.

image-8

Poursuivons avec le prochain de la liste : Mess Detector. Il vous suffira de sélectionner l’interpréteur déjà configuré.

image-9

Renseignez l’interpréteur et cliquez sur les « … »

image-11

Renseignez le path mapping :/composer/vendor/bin/phpmd et on est bon !

image-10

On poursuit avec Mess detector. On choisit toujours notre configuration sur qa-php-7.4 et on clique « … ». Puis on clique sur le « + »

image-13

Renseignez le PHP CS Fixer path /composer/vendor/bin/php-cs-fixer et validez.

image-14

Poursuivons avec Psalm. On choisit toujours notre interpreteur.

image-16
image-17

On renseigne le psalm path : /composer/vendor/bin/psalm et on valide.

image-18

On finit par le petit dernier de la liste PHPStan. On l’active et on clique sur « … »

image-19
image-20

Renseignez le PHPSTAN path /composer/vendor/bin/phpstan , validez et vous êtes bon :

image-21

Et voilà ! Nous avons l’ensemble de nos outils de qualité convenablement liés à notre conteneur Docker.

Vous pouvez à présent tester que tout se passe bien avant d’affiner vos paramètres.

image-22
image-23

Dans la liste dépliez PHP > Quality tools et pensez à cocher l’ensemble :

image-24
image-25

Cliquez sur Analyze :

image-26

L’ensemble des remarques apparaîtrons directement dans l’onglet « Problems » de PhpStorm. Attention si vous avez inclus l’ensemble de votre projet. Préférez peut-être n’inclure que src ou d’exclure le rep vendor sous peine de crouler sous les notifications !

Et voilà ! Happy coding 🙂