← Tutti i progetti
Open source 📅 2026 GitHub

Prettier Plugin per ObjectScript

Code formatter opinionated per InterSystems ObjectScript come plugin Prettier 3, basato su parsing AST con Tree-sitter. Progetto open source personale per portare il tooling moderno a un linguaggio di nicchia.

✦ Open source, MIT✦ Integrazione VS Code completa✦ Test di idempotenza e parsing su ogni fixture

Contesto

ObjectScript è un linguaggio proprietario di InterSystems, usatissimo in ambito sanitario ma quasi senza tooling moderno: niente formatter automatico decente, niente standardizzazione. In Healthy Reply il codice ObjectScript è ovunque, e la qualità e la leggibilità del codice sono un tema quotidiano.

Ho quindi progettato e implementato un code formatter opinionated come plugin per Prettier 3 — il formatter di fatto standard dell’ecosistema JavaScript — estendendolo a un linguaggio completamente diverso.

Cosa fa

  • Casing canonico dei comandi e opzionale espansione delle abbreviazioni (sSet).
  • Indentazione intelligente per classi, metodi, blocchi, comandi e letterali JSON.
  • Formattazione di espressioni, argomenti, tipi e riferimenti a oggetti ObjectScript.
  • Parsing strict opzionale: solleva errori quando Tree-sitter riporta ERROR o nodi mancanti (ottimo in CI).
  • Debug selettivo dell’AST su stderr, con filtri per tipi di nodo e range di sorgente — non contamina mai l’output formattato.
  • Integrazione VS Code: funziona con l’estensione ufficiale Prettier + l’estensione ObjectScript di InterSystems, con format-on-save.

Architettura

flowchart LR
  S["Codice sorgente<br/>MyClass.cls"] --> TS["tree-sitter-objectscript<br/>(parsing AST)"]
  TS --> P["Plugin Prettier<br/>(print AST)"]
  P --> O["Output formattato"]
  O --> T1["Test: output atteso"]
  O --> T2["Test: idempotenza"]
  O --> T3["Test: nessuna diagnosi<br/>di parsing"]

Dal codice ObjectScript al codice formattato

Il parsing è demandato alla grammatica tree-sitter-objectscript (mantenuta da InterSystems), pinnata a un commit specifico: locale e CI usano lo stesso parser. Il plugin è un normale plugin Prettier 3: opzioni custom (objectScriptCommandCase, objectScriptExpandCommands, objectScriptStrictParsing, …), stampa dell’AST secondo le regole Prettier.

Scelte progettuali

  • Pinnare la grammatica: package-lock.json versionato e grammatica pinnata = risultati riproducibili tra locale e CI. Niente sorprese da update upstream.
  • Strict parsing opt-in: la grammatica upstream può ancora segnalare errori su costrutti legacy validi; per non rompere chi lavora su codice vecchio, lo strict è un flag.
  • Debug su stderr con filtri: durante lo sviluppo del formatter serve vedere l’AST; invece di sporcare l’output, tutto va su stderr con opzioni di filtro (--object-script-debug-nodes, range, max).
  • Test a quattro livelli per ogni fixture: output atteso rivisto, idempotenza (formattare due volte = nessun cambiamento), validità sintattica dell’output generato, comportamento delle opzioni. Lo script di update rifiuta di scrivere expected file se l’output non è idempotente o introduce diagnosi di parsing.

Risultati

  • Plugin pubblicabile su npm (installabile oggi via GitHub: npm install prettier git+https://github.com/FilippoGalli001/prettier-plugin-objectscript.git).
  • Integrazione VS Code documentata passo-passo, da usare anche in altri workspace ObjectScript.
  • Un tool che a lavoro migliora la vita di chiunque tocchi codice ObjectScript — standardizzazione automatica della sintassi.

Note

Linguaggio di implementazione: JavaScript/TypeScript, Node 18.14+. Progetto MIT, repo pubblico: FilippoGalli001/prettier-plugin-objectscript.

Link