Laravel Pint è un “code style fixer” cucito su misura per Laravel, è open source, è basato sul progetto PHP-CS-Fixer e non ha altre dipendenze da installare.
Come? Non hai mai sentito parlare di PHP-CS-Fixer?
Che cos’è PHP-CS-Fixer
Innanzitutto, PHP-CS-Fixer (PHP Coding Standards Fixer) è una libreria open source che ti permette di standardizzare il codice utilizzando delle regole uguali per tutti gli sviluppatori coinvolti nel progetto.
Le regole possono essere personalizzate in base al team oppure secondo il PSR che sta per PHP Standard Recommendation. Le regole PSR sono state introdotte dal gruppo denominato PHP-FIG e puoi trovarle aggiornate a questo link.
Praticamente una volta lanciato il comando del fixer verrà scandagliato tutto il codice del progetto e verranno apportate automaticamente correzioni o modifiche seguendo le regole di stile precedentemente impostate.
Il principale vantaggio di utilizzare PHP-CS-Fixer nei tuoi progetti è la sua capacità di migliorare la leggibilità e la manutenibilità del codice per noi poveri esseri umani.
Potrai direi addio (o quasi) a tutti gli errori legati alla formattazione (spazi, parentesi disallineate, indentazioni mancate ecc.) e concentrarti sulle features da implementare nel codice.
Perchè utilizzare Laravel Pint
PHP-CS-Fixer è uno strumento mastodontico da configurare e utilizzare, per chi è alle prime armi potrebbe essere uno scoglio insormontabile.
Laravel Pint, invece, è creato appositamente per Laravel. Vengono rispettati tutti gli standard PSR e non dovrai preoccuparti di nulla. La configurazione base è gia cucita su misura per il framework Laravel. Avrai tutto il codice sotto standard PSR-12 senza configurare nulla!
Come detto nella descrizione di PHP-CS-Fixer, questo tool serve appunto per rendere il codice ‘compliant’ tra tutti i membri del team e non solo.
Anche in fase di onboarding di potenziali nuovi membri del team, seguire delle linee guida universali, ti permetterà un inserimento delle nuove risorse molto piú veloce e indolore.
Come si installa Laravel Pint
Per i nuovi progetti non avrai bisogno di installare nulla, Laravel Pint è presente nelle dipendenze di Laravel.
"require-dev": { "fakerphp/faker": "*****", "laravel/pint": "*****", "laravel/sail": "*****"},
Per progetti gia inizializzati, invece, potrai installare Laravel Pint con il comando:
composer require laravel/pint --dev
Tutto qui, installazione completata.
Come utilizzare laravel Pint
Il tool è installato, non ti resta che lanciare da terminale il comando:
./vendor/bin/pint
Stai richiamando le funzionalità di Pint in tutto il progetto.
Inoltre potrai lanciare la verifica sulla singola cartella:
./vendor/bin/pint app/Models
Oppure sul singolo file:
./vendor/bin/pint app/Models/User.php
Preset
Di default Laravel Pint avrà configurato il preset Laravel, appunto.
Ma supponiamo di voler formattare il progetto secondo lo standard PSR12, dovremo semplicemente effettuare una sovrascrittura del file di configurazione standard.
Da terminale, crea un file nella root del progetto chiamato pint.json:
touch pint.json
In questo file .json appena creato inserisci il preset di riferimento:
{ "preset": "psr12"}
I preset che sono supportati al momento da laravel Pint sono: laravel, psr12, e symfony.
Regole di Configurazione
Come detto Laravel Pint puo essere configurato semplicemnte impostando i preset: Laravel, Symfony o più genericamente per il PSR-12.
Ma, supponiamo il caso tu sia un Lead Developer e desideri personalizzare il file di configurazione con altre regole: nulla di piu semplice.
Ti ricordo che sotto la scocca c’è il motore di PHP-CS-Fixer quindi sono disponibili tutte le regole di stile di quest’ultimo.
Una risorsa importante da cui attingere le regole è il configuratore nativo di PHP-CS-Fixer che ti offrirà una serie di regole specifiche per formattare il codice.
Ad esempio voglio semplificare i return delle funzioni e dei metodi, rimuovendo tutti i return null sparsi nella mia codebase:
{ "preset": "laravel", "rules": { "simplified_null_return": true }}
Cosi facendo una eventuale funzione:
public function testCase($a): void{ if (!is_null($a)) { $this->goToFunction($a); } return null;}
Dopo aver lanciato il comando:
./vendor/bin/pint
Verrà corretta in:
public function testCase($a): void { if (!is_null($a)) { $this->goToFunction($a); } - return null; }
Escludere File o Cartelle
Sempre in ottica di personalizzare il preset, è possibile anche escludere file o cartelle in maniera altrettanto semplice.
Di default verrà sempre ignorato il contenuto del vendor (per ovvi motivi) ma a tuo piacimento potrai escludere:
- Per cartella
{ "exclude": [ "package/cartella-mio-pacchetto" ]}
- Per pattern di nomi
{ "notName": [ "*-v2.php" ]}
- Per singolo file
{ "notPath": [ "package/cartella-mio-pacchetto/file.php" ]}
In Conclusione
Se sviluppi prevalentemente con Laravel, utilizzare Laravel Pint è altamente consigliato. Ne gioverai sia da un punto di vista di pulizia che di qualità del codice.
Non dimenticare che è basato su PHP CS Fixer, quindi Laravel Pint sfrutta appieno tutta la potenza della libreria originale offrendotri dei presets gia configurati.