Parser TOML
TOML (Tom's Obvious Minimal Language) e um formato de arquivo de configuracao minimo projetado para ser facil de ler e escrever. E o formato de configuracao padrao para Rust (Cargo.toml), empacotamento Python (pyproject.toml) e muitas outras ferramentas de desenvolvimento modernas.
Especificacoes
Casos de Uso Comuns
- Analisar Cargo.toml para dependencias e metadados de projetos Rust
- Ler pyproject.toml para configuracao de build Python (PEP 518/621)
- Processar configuracoes de Hugo, Zola ou outros geradores de sites estaticos
- Editar arquivos de configuracao do Deno (deno.toml)
- Validar configuracao antes da implantacao
Funcionalidades
- Suporte completo a especificacao TOML v1.0.0
- Analisar tabelas, arrays de tabelas e estruturas aninhadas
- Processar tabelas e arrays inline
- Suporte para valores de data/hora
- Converter para JSON, YAML ou XML
- Validacao de sintaxe com mensagens de erro
Exemplos
Rust Cargo.toml
Experimente →Um manifesto Cargo definindo metadados do pacote e dependencias.
[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
Experimente →Uma configuracao de projeto Python com sistema de build e metadados.
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "my-package"
version = "1.0.0"
dependencies = ["requests>=2.28"]Dicas
- TOML usa = para pares chave-valor, diferente dos dois-pontos do YAML.
- Strings devem estar entre aspas. Use """ para strings de varias linhas.
- Tabelas ([table]) criam estruturas aninhadas.
- Arrays de tabelas usam a sintaxe [[array]].
Entendendo Parser TOML
TOML (Tom's Obvious Minimal Language) e um formato de arquivo de configuracao projetado para ser inequivoco e facil de ler. Criado por Tom Preston-Werner (cofundador do GitHub), TOML mapeia de forma limpa para uma tabela hash e e intencionalmente mais simples que YAML, sendo mais expressivo que arquivos INI. A versao 1.0.0 foi finalizada em 2021.
O design do TOML centra-se na clareza. Chaves e valores usam uma sintaxe simples "key = value". Tabelas (secoes) sao indicadas com [colchetes], criando estruturas aninhadas sem sensibilidade a indentacao. Arrays de tabelas usam [[colchetes duplos]] para definir secoes repetidas. TOML suporta nativamente strings, inteiros, floats, booleanos, datas, horas e date-times como tipos de primeira classe, eliminando ambiguidades de parsing comuns em JSON e YAML.
O ecossistema Rust adotou TOML cedo com Cargo.toml como formato de manifesto de pacote. Python seguiu com pyproject.toml (PEP 518 e PEP 621), tornando-o o substituto moderno para setup.py e setup.cfg. TOML tambem aparece em ferramentas Go, Deno (deno.toml), Hugo e muitas outras ferramentas de desenvolvimento que valorizam configuracao explicita e legivel.
TOML troca flexibilidade por previsibilidade. Diferente do YAML, ha apenas uma forma de representar cada estrutura de dados. Nao ha ancoras, aliases, surpresas de coercao de tipo implicita e nenhum espaco em branco significativo. A contrapartida e que estruturas profundamente aninhadas se tornam verbosas, ja que cada nivel requer seu proprio cabecalho de tabela.
TOML se destaca em arquivos de configuracao planos ou moderadamente aninhados que humanos editam frequentemente. Sua sintaxe inequivoca evita armadilhas do YAML como coercao booleana e erros de indentacao, sendo mais legivel que JSON para propositos de configuracao. TOML e a escolha natural para manifestos de projetos (Cargo.toml, pyproject.toml) e configuracao de ferramentas. YAML continua mais adequado para estruturas profundamente aninhadas como manifestos Kubernetes, e JSON e o padrao para intercambio de dados entre sistemas.
A sintaxe [[colchetes duplos]] cria arrays de tabelas, onde cada ocorrencia do cabecalho adiciona um novo elemento ao array. Por exemplo, [[products]] aparecendo tres vezes cria um array de tres objetos de produto, cada um com seus proprios pares chave-valor coletados em ordem. TOML tambem suporta comentarios de uma linha usando o simbolo hash (#), que podem aparecer em sua propria linha ou apos um valor. Nao ha sintaxe de comentario de varias linhas, mas a variante de uma linha ainda e uma vantagem significativa sobre JSON, que nao tem nenhum suporte a comentarios.
Tabelas e tabelas inline servem propositos diferentes. Tabelas usam a sintaxe [header] e abrangem varias linhas, tornando-as legiveis para secoes com muitas chaves. Tabelas inline usam chaves em uma unica linha (key = { a = 1, b = 2 }) e devem ser definidas inteiramente nessa unica linha — nao podem ser estendidas apos a definicao. Como regra geral, use tabelas padrao para legibilidade quando uma secao tem mais de duas ou tres chaves.