Parser TOML
TOML (Tom's Obvious Minimal Language) e un formato di file di configurazione minimale progettato per essere facile da leggere e scrivere. E il formato di configurazione standard per Rust (Cargo.toml), il packaging Python (pyproject.toml) e molti altri strumenti di sviluppo moderni.
Specifiche
Casi d'uso comuni
- Analizzare Cargo.toml per dipendenze e metadati di progetti Rust
- Leggere pyproject.toml per la configurazione di build Python (PEP 518/621)
- Elaborare configurazioni di Hugo, Zola o altri generatori di siti statici
- Modificare file di configurazione Deno (deno.toml)
- Validare la configurazione prima del deployment
FunzionalitÃ
- Supporto completo alla specifica TOML v1.0.0
- Analisi di tabelle, array di tabelle e strutture annidate
- Gestione di tabelle e array inline
- Supporto per valori di data/ora
- Conversione in JSON, YAML o XML
- Validazione della sintassi con messaggi di errore
Esempi
Rust Cargo.toml
Provalo →Un manifesto Cargo che definisce i metadati del pacchetto e le dipendenze.
[package]
name = "my-project"
version = "0.1.0"
edition = "2021"
[dependencies]
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1", features = ["full"] }Python pyproject.toml
Provalo →Una configurazione di progetto Python con sistema di build e metadati.
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "my-package"
version = "1.0.0"
dependencies = ["requests>=2.28"]Suggerimenti
- TOML usa = per le coppie chiave-valore, a differenza dei due punti di YAML.
- Le stringhe devono essere tra virgolette. Usa """ per stringhe multiriga.
- Le tabelle ([table]) creano strutture annidate.
- Gli array di tabelle usano la sintassi [[array]].
Approfondimenti Parser TOML
TOML (Tom's Obvious Minimal Language) e un formato di file di configurazione progettato per essere non ambiguo e facile da leggere. Creato da Tom Preston-Werner (co-fondatore di GitHub), TOML mappa in modo pulito a una tabella hash ed e intenzionalmente piu semplice di YAML pur essendo piu espressivo dei file INI. La versione 1.0.0 e stata finalizzata nel 2021.
Il design di TOML si concentra sulla chiarezza. Chiavi e valori usano una semplice sintassi "key = value". Le tabelle (sezioni) sono indicate con [parentesi quadre], creando strutture annidate senza sensibilita all'indentazione. Gli array di tabelle usano [[doppie parentesi quadre]] per definire sezioni ripetute. TOML supporta nativamente stringhe, interi, float, booleani, date, orari e date-time come tipi di prima classe, eliminando le ambiguita di analisi comuni in JSON e YAML.
L'ecosistema Rust ha adottato TOML presto con Cargo.toml come formato di manifesto del pacchetto. Python ha seguito con pyproject.toml (PEP 518 e PEP 621), rendendolo il sostituto moderno di setup.py e setup.cfg. TOML appare anche negli strumenti Go, Deno (deno.toml), Hugo e molti altri strumenti per sviluppatori che apprezzano una configurazione esplicita e leggibile.
TOML scambia flessibilita con prevedibilita. A differenza di YAML, esiste un solo modo per rappresentare ogni struttura dati. Non ci sono ancoraggi, alias, sorprese di coercizione di tipo implicita, ne spazi significativi. Il compromesso e che le strutture profondamente annidate diventano verbose, poiche ogni livello richiede il proprio header di tabella.
TOML eccelle per file di configurazione piatti o moderatamente annidati che gli esseri umani modificano frequentemente. La sua sintassi non ambigua evita le insidie di YAML come la coercizione booleana e gli errori di indentazione, pur essendo piu leggibile di JSON per scopi di configurazione. TOML e la scelta naturale per i manifesti di progetto (Cargo.toml, pyproject.toml) e la configurazione degli strumenti. YAML rimane piu adatto per strutture profondamente annidate come i manifesti Kubernetes, e JSON e lo standard per lo scambio di dati tra sistemi.
La sintassi [[doppie parentesi quadre]] crea array di tabelle, dove ogni occorrenza dell'header aggiunge un nuovo elemento all'array. Ad esempio, [[products]] che appare tre volte crea un array di tre oggetti prodotto, ciascuno con le proprie coppie chiave-valore raccolte in ordine. TOML supporta anche commenti su riga singola usando il simbolo hash (#), che possono apparire sulla propria riga o dopo un valore. Non esiste una sintassi per commenti multiriga, ma la variante a riga singola e comunque un vantaggio significativo rispetto a JSON, che non ha alcun supporto per i commenti.
Tabelle e tabelle inline servono scopi diversi. Le tabelle usano la sintassi [header] e si estendono su piu righe, rendendole leggibili per sezioni con molte chiavi. Le tabelle inline usano parentesi graffe su una singola riga (key = { a = 1, b = 2 }) e devono essere definite interamente su quella riga — non possono essere estese dopo la definizione. Come regola generale, usa le tabelle standard per la leggibilita quando una sezione ha piu di due o tre chiavi.