Controllo sintassi PHP integrato in Joe’s Editor

Se sei uno sviluppatore PHP che ama la CLI come me, forse usi JOE (Joe’s Own Editor) come editor di testo su Linux. Veloce, leggero, sempre disponibile su qualsiasi server. Certo, non ha le comodita di VS Code o PhpStorm, ma quando sei connesso via SSH a un server remoto, JOE fa il suo dovere egregiamente.

Un limite che ho sempre sentito e l’assenza di un syntax check PHP integrato. Con i moderni IDE hai l’errore evidenziato in tempo reale, mentre con JOE devi salvare, uscire, eseguire php -l nomefile.php dal terminale, rientrare… noioso.

Cosi mi sono messo a studiare il sistema di macro di JOE e, dopo qualche ora di sperimentazione (la documentazione e praticamente inesistente!), ho trovato una soluzione che:

  • Esegue il syntax check sul buffer in memoria, senza dover salvare il file
  • Mostra il risultato colorato direttamente nel terminale
  • Ripristina il cursore esattamente sulla riga dove stavi lavorando
  • E tutto inline, senza script esterni
  • Si attiva con una scorciatoia da tastiera personalizzabile

Come funziona

La soluzione sfrutta il comando filt di JOE, che permette di fare il pipe del buffer verso un comando shell e poi rimettere lo stdout nel buffer. Il trucco e redirigere l’output di php -l su /dev/tty invece che nel buffer, cosi il file non viene toccato.

Per salvare e ripristinare la posizione si usa il pattern markl + tomarkb + nmark: si segna la riga corrente come block mark, dopo il check si torna al mark, poi si cancella il mark per non lasciare la riga evidenziata.

I colori vengono aggiunti tramite escape ANSI con sed: verde per “no errors”, sfondo rosso per i Parse error.

La configurazione

Apri (o crea) il file ~/.joerc e aggiungi queste righe in fondo:

Salva, riavvia JOE. La scorciatoia e CTRL+e(accent grave) seguito da P (sulla tastiera italiana il tasto con la e accentata ha la parentesi quadra aperta con AltGr, che e il carattere ESC nella notazione JOE).

Cosa vedi quando lo usi

Premi la scorciatoia mentre editi un file PHP: appare il risultato colorato:

  • Verde: nessun errore di sintassi
  • Sfondo rosso, testo bianco: Parse error con numero di riga

Poi appare “— Premi ENTER—” in grassetto. Quando premi Invio, JOE ridisegna lo schermo e il cursore torna sulla riga di partenza. Il file non e stato toccato.

Note tecniche

Alcune cose non ovvie scoperte durante lo sviluppo:

  • In JOE 4.6 le sezioni si dichiarano con :main, non [Main]
  • Il binding si scrive prima il comando poi la scorciatoia, non il contrario
  • psh/pop in JOE salva i block markers, NON la posizione del cursore (tranello!)
  • printf con doppio backslash e l’unico modo portabile per gli escape ANSI; echo con sintassi bash non funziona perche JOE usa sh plain
  • Gli apici singoli nel sed funzionano correttamente dentro le virgolette doppie della macro

Spero sia utile a qualche altro fan di JOE!


Mauro Longone – Stylesoft.it