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.

← Torna a tutti gli strumenti