Stack Tecnologico¶
Le tecnologie adottate non sono state scelte in modo decorativo, ma in relazione diretta alle esigenze del progetto.
| Tecnologia | Ruolo nel progetto | Motivazione |
|---|---|---|
| Scala 3 | Linguaggio di programmazione principale | offre ottimo supporto a DSL, immutabilità, ADT, enum, espressività tipizzata |
| Sbt | Build Tool | standard nell’ecosistema Scala, adatto a test e build |
| Scala CLI | Esecuzione script utente | permette di valutare .sc in modo semplice e integrabile |
| ScalaTags | Generazione HTML | consente di costruire HTML tipizzato e leggibile senza template engine esterno |
| GitHub Actions | CI/CD | automatizza test e build, integrato con GitHub |
| os-lib | File system e processi | semplifica I/O, path handling e chiamate di processo in modo chiaro |
| ScalaTest | Testing | API leggibile e coerente con lo stile del progetto |
| Semantic-Release | Release automation | automatizza versionamento e pubblicazione dell'artefatto |
| GitHub Pages | Pubblicazione del sito | soluzione leggera per ospitare il sito del progetto |
| Tailwind CSS via CDN | Stile visuale HTML | permette di ottenere rapidamente una resa moderna senza build frontend dedicata |
| Commit Lint | Linting dei commit | garantisce coerenza nei messaggi di commit, facilitando la gestione del progetto e l'automazione delle release |
| Scala Fmt | Formattazione del codice | assicura uno stile di codice uniforme e leggibile |
| Scala Fix | Refactoring automatico | aiuta a mantenere il codice pulito e aggiornato con le best practice di Scala |
| Husky | Git Hooks | automatizza l'esecuzione di script prima dei commit e dei push, garantendo la qualità del codice e la coerenza dei commit |
| Codecov | Monitoraggio della copertura dei test | fornisce metriche dettagliate sulla copertura del codice, aiutando a identificare aree non sufficientemente testate |
| Mkdocs | Documentazione | facilita la creazione e la pubblicazione di documentazione accessibile e ben strutturata |
| Mermaid | Diagrammi | consente di creare diagrammi di classe e altri tipi di visualizzazioni direttamente nei documenti Markdown |
| Renovate | Gestione delle dipendenze | automatizza l'aggiornamento delle dipendenze, mantenendo il progetto sicuro e aggiornato |
Motivazione delle scelte¶
Scala 3¶
Scala 3 è stata una scelta naturale per un progetto che ruota attorno a un DSL. La possibilità di modellare il dominio con enum, case class, pattern matching e funzioni di alto livello ha reso più agevole costruire una sintassi espressiva senza compromettere il rigore.
Sbt¶
Sbt è lo standard de facto per i progetti Scala. La sua flessibilità e il supporto per la gestione delle dipendenze, i test e la compilazione incrementale lo rendono ideale per un progetto che richiede iterazione rapida e affidabilità.
Scala CLI¶
La presenza di una CLI che esegue script utente rende Scala CLI uno strumento molto coerente con il problema. Invece di inventare un interprete ad hoc, il sistema sfrutta un’infrastruttura già esistente per valutare la descrizione della presentazione.
ScalaTags¶
Per il renderer HTML si è preferito evitare un motore di template tradizionale. ScalaTags si integra bene con Scala, permette una costruzione programmatica del DOM e mantiene il rendering vicino alla logica che lo governa aumentando l'espressività.
Tailwind CSS via CDN¶
Per il sito e per l’HTML è stata privilegiata la semplicità operativa. L’uso del CDN elimina una pipeline frontend dedicata e accelera l’iterazione grafica. È una scelta consapevole, adatta a questa scala progettuale.
Commit Lint¶
L'adozione di Commit Lint è stata motivata dalla necessità di mantenere una storia dei commit chiara e coerente. Questo non solo facilita la collaborazione, ma è anche essenziale per l'automazione delle release con Semantic-Release, che si basa sui messaggi di commit per determinare le versioni da rilasciare.
Scala Fmt e Scala Fix¶
L'uso di Scala Fmt e Scala Fix è stato dettato dalla volontà di mantenere un codice pulito, leggibile e conforme alle best practice. Scala Fmt assicura uno stile uniforme, mentre Scala Fix aiuta a refactorare il codice in modo automatico, mantenendo il progetto aggiornato con le evoluzioni del linguaggio e delle librerie utilizzate.
Husky¶
Husky è stato scelto per automatizzare l'esecuzione di script prima dei commit e dei push. Questo garantisce che i test vengano eseguiti, che i commit siano formattati correttamente e che i messaggi di commit rispettino le convenzioni stabilite, contribuendo a mantenere la qualità del codice e la coerenza del progetto.
Codecov¶
L'adozione di Codecov è stata motivata dalla necessità di monitorare la copertura dei test in modo dettagliato. Codecov fornisce metriche precise sulla copertura del codice, aiutando a identificare aree che potrebbero essere insufficientemente testate e a mantenere un alto standard qualitativo per il progetto.
Mkdocs¶
Mkdocs è stato scelto per la documentazione del progetto grazie alla sua semplicità d'uso e alla capacità di generare siti statici ben strutturati. La possibilità di scrivere la documentazione in Markdown e di ospitarla facilmente su GitHub Pages lo rende una soluzione ideale per rendere accessibile e ben organizzata la documentazione di DeclSlides.
Mermaid¶
Mermaid è stato adottato per la creazione di diagrammi direttamente nei documenti Markdown. Questo strumento consente di rappresentare visivamente concetti complessi come la struttura del dominio o l'architettura del sistema in modo chiaro e integrato con la documentazione, migliorando la comprensione e la comunicazione delle idee chiave del progetto.
Renovate¶
Renovate è stato scelto per automatizzare la gestione delle dipendenze del progetto. Questo strumento monitora le dipendenze utilizzate e crea pull request automatiche quando sono disponibili aggiornamenti, contribuendo a mantenere il progetto sicuro e aggiornato senza richiedere un intervento manuale costante. Renovate supporta anche la configurazione di regole personalizzate per gestire le dipendenze in modo flessibile, adattandosi alle esigenze specifiche del progetto.