Parser TOML

TOML (Tom's Obvious Minimal Language) adalah format file konfigurasi minimal yang dirancang agar mudah dibaca dan ditulis. TOML merupakan format konfigurasi standar untuk Rust (Cargo.toml), packaging Python (pyproject.toml), dan banyak alat pengembangan modern lainnya.

Spesifikasi

Kasus Penggunaan Umum

  • Mengurai Cargo.toml untuk dependensi dan metadata proyek Rust
  • Membaca pyproject.toml untuk konfigurasi build Python (PEP 518/621)
  • Memproses konfigurasi Hugo, Zola, atau generator situs statis lainnya
  • Mengedit file konfigurasi Deno (deno.toml)
  • Memvalidasi konfigurasi sebelum deployment

Fitur

  • Dukungan penuh spesifikasi TOML v1.0.0
  • Mengurai tabel, array tabel, dan struktur bersarang
  • Menangani tabel dan array inline
  • Dukungan untuk nilai tanggal/waktu
  • Mengonversi ke JSON, YAML, atau XML
  • Validasi sintaks dengan pesan error

Contoh

Rust Cargo.toml

Coba →

Manifes Cargo yang mendefinisikan metadata paket dan dependensi.

[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

Coba →

Konfigurasi proyek Python dengan sistem build dan metadata.

[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "my-package"
version = "1.0.0"
dependencies = ["requests>=2.28"]

Tips

  • TOML menggunakan = untuk pasangan kunci-nilai, berbeda dengan titik dua pada YAML.
  • String harus diapit tanda kutip. Gunakan """ untuk string multi-baris.
  • Tabel ([table]) membuat struktur bersarang.
  • Array tabel menggunakan sintaks [[array]].

Pemahaman Parser TOML

TOML (Tom's Obvious Minimal Language) adalah format file konfigurasi yang dirancang untuk tidak ambigu dan mudah dibaca. Dibuat oleh Tom Preston-Werner (salah satu pendiri GitHub), TOML dipetakan secara bersih ke tabel hash dan sengaja dibuat lebih sederhana dari YAML namun lebih ekspresif dari file INI. Versi 1.0.0 diresmikan pada 2021.

Desain TOML berpusat pada kejelasan. Kunci dan nilai menggunakan sintaks "key = value" yang sederhana. Tabel (bagian) ditandai dengan [kurung siku], membuat struktur bersarang tanpa sensitivitas indentasi. Array tabel menggunakan [[kurung siku ganda]] untuk mendefinisikan bagian yang berulang. TOML secara native mendukung string, integer, float, boolean, tanggal, waktu, dan date-time sebagai tipe kelas satu, menghilangkan ambiguitas parsing yang umum pada JSON dan YAML.

Ekosistem Rust mengadopsi TOML sejak awal dengan Cargo.toml sebagai format manifes paket. Python menyusul dengan pyproject.toml (PEP 518 dan PEP 621), menjadikannya pengganti modern untuk setup.py dan setup.cfg. TOML juga muncul di alat Go, Deno (deno.toml), Hugo, dan banyak alat pengembang lainnya yang menghargai konfigurasi eksplisit dan mudah dibaca.

TOML menukar fleksibilitas dengan prediktabilitas. Berbeda dengan YAML, hanya ada satu cara untuk merepresentasikan setiap struktur data. Tidak ada anchor, alias, kejutan koersi tipe implisit, dan tidak ada spasi putih yang signifikan. Komprominya adalah struktur yang sangat bersarang menjadi verbose, karena setiap level memerlukan header tabelnya sendiri.

TOML unggul untuk file konfigurasi datar atau cukup bersarang yang sering diedit manusia. Sintaksnya yang tidak ambigu menghindari jebakan YAML seperti koersi boolean dan error indentasi, sekaligus lebih mudah dibaca daripada JSON untuk keperluan konfigurasi. TOML adalah pilihan alami untuk manifes proyek (Cargo.toml, pyproject.toml) dan konfigurasi alat. YAML tetap lebih cocok untuk struktur yang sangat bersarang seperti manifes Kubernetes, dan JSON adalah standar untuk pertukaran data antar sistem.

Sintaks [[kurung siku ganda]] membuat array tabel, di mana setiap kemunculan header menambahkan elemen baru ke array. Misalnya, [[products]] yang muncul tiga kali membuat array berisi tiga objek produk, masing-masing dengan pasangan kunci-nilai yang dikumpulkan secara berurutan. TOML juga mendukung komentar satu baris menggunakan simbol hash (#), yang dapat muncul di barisnya sendiri atau setelah nilai. Tidak ada sintaks komentar multi-baris, tetapi varian satu baris tetap merupakan keuntungan signifikan dibanding JSON, yang sama sekali tidak mendukung komentar.

Tabel dan tabel inline melayani tujuan yang berbeda. Tabel menggunakan sintaks [header] dan membentang beberapa baris, membuatnya mudah dibaca untuk bagian dengan banyak kunci. Tabel inline menggunakan kurung kurawal dalam satu baris (key = { a = 1, b = 2 }) dan harus didefinisikan sepenuhnya dalam satu baris itu — tidak dapat diperluas setelah definisi. Sebagai aturan praktis, gunakan tabel standar untuk keterbacaan ketika bagian memiliki lebih dari dua atau tiga kunci.

← Kembali ke semua alat