Pourquoi utiliser des outils d'analyse de code et de linter ?

Catégories

Symfony Php Laravel

Pourquoi je vous conseille d'utiliser des linters et scanners pour améliorer la qualité de votre code ?

Nous allons prendre l'exemple d'une application PHP avec le framework Symfony ou Laravel, cela fonctionne aussi pour les autres langages.

Qu'est-ce qu'un linter et un scanner de code ?

  • Le linter va vous permettre d'avoir une uniformité, une meilleure maintenabilité, et une meilleure lisibilité.
  • Le scanner de code augmente la fiabilité de votre code. Si nous prenons l'exemple de PHP, nous utilisons généralement PHPStan, il nous permet d'avoir un typage fort, il vérifie si une variable n'est pas nulle, etc... Nous allons voir plusieurs exemples.

Comment les configurer

Configuration de notre Linter

Avec Laravel, nous pouvons utiliser un bundle Laravel Pint, il nous donne une configuration de base et une simplicité pour la configuration.
Symfony et les autres frameworks n'ont pas encore cette chance, ils utilisent PHP-CS-Fixer qui est un peu plus complexe à configurer mais rien d'insurmontable, surtout avec les exemples open source d'aujourd'hui.

// PHP-CS-Fixer
declare(strict_types=1);

$finder = (new PhpCsFixer\Finder())
    ->in(__DIR__)
    ->exclude(['var', 'lib'])
;

return (new PhpCsFixer\Config())
    ->setParallelConfig(PhpCsFixer\Runner\Parallel\ParallelConfigFactory::detect())
    ->setRules([
        '@Symfony' => true,
        // customized rules :
        'concat_space' => ['spacing' => 'one'],
        'phpdoc_align' => ['align' => 'left'],
        'phpdoc_separation' => ['skip_unlisted_annotations' => true],
        'nullable_type_declaration_for_default_null_value' => true,
        'yoda_style' => false,
        'phpdoc_to_comment' => false,
    ])
    ->setFinder($finder);

Configuration de PHPStan

Installer PHPStan :

composer require --dev phpstan/phpstan
  • Créer un fichier pour le configurer phpstan.neon.
  • Ajouter la configuration par défaut.
    Pour tous les frameworks, nous avons des règles qui sont déjà prêtes.
# Laravel
includes:
    - ./vendor/larastan/larastan/extension.neon

# Symfony
includes:
    - vendor/phpstan/phpstan-doctrine/extension.neon
    - vendor/phpstan/phpstan-symfony/extension.neon

parameters:
    level: 8 # 1 -> 10
    parallel:
        maximumNumberOfProcesses: 1
    paths:
        - app
    excludePaths:
        # ajouter tous les fichiers / dossiers que vous ne voulez pas prendre en compte
        - ./.github
        - ./.scripts
        - ./docker
        - ./node_modules
        - ./public
        - ./vendor
    ignoreErrors:

Lancer nos outils

Pour un meilleur confort, je vous conseille d'utiliser make qui va nous permettre de ne pas retenir par cœur les commandes.

  • Créer un fichier Makefile
  • Ajouter ces commandes
.PHONY: help
.DEFAULT_GOAL = help

## —— Tools 🛠️️ ———————————————————————————————————————————————————————————————
.PHONY: cs
cs: ## code style check
    ./vendor/bin/php-cs-fixer fix --dry-run --diff

.PHONY: fix
fix: ## code style fix
    ./vendor/bin/php-cs-fixer fix

.PHONY: phpstan
phpstan: ## phpstan
    vendor/bin/phpstan analyse --memory-limit=2G

## —— Others 🛠️️ ———————————————————————————————————————————————————————————————
help: ## listing command
    @grep -E '(^[a-zA-Z0-9_-]+:.*?##.*$$)|(^##)' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}{printf "\033[32m%-30s\033[0m %s\n", $$1, $$2}' | sed -e 's/\[32m##/[33m/'

Lancer le linter

Voir les modifications que PHP-CS-Fixer nous propose.

make cs

Si cela vous convient alors vous pouvez les appliquer

make fix

Pour conclure

Ces outils vous assurent d'avoir un code de qualité en gardant une maintenabilité sur votre projet. Au début c'est déroutant mais avec le temps on apprend énormément de choses et au bout de 3/4 mois on n'y pense plus, on le fait naturellement. Donc je pense que c'est vraiment un atout pour votre projet :)

0 Commentaire