Парсер TOML

TOML (Tom's Obvious Minimal Language) — минимальный формат конфигурационных файлов, спроектированный для простоты чтения и записи. Это стандартный формат конфигурации для Rust (Cargo.toml), упаковки Python (pyproject.toml) и многих других современных инструментов разработки.

Спецификации

Типичные сценарии использования

  • Разбор Cargo.toml для зависимостей и метаданных проектов Rust
  • Чтение pyproject.toml для конфигурации сборки Python (PEP 518/621)
  • Обработка конфигураций Hugo, Zola или других генераторов статических сайтов
  • Редактирование конфигурационных файлов Deno (deno.toml)
  • Валидация конфигурации перед развёртыванием

Возможности

  • Полная поддержка спецификации TOML v1.0.0
  • Разбор таблиц, массивов таблиц и вложенных структур
  • Обработка инлайн-таблиц и массивов
  • Поддержка значений даты/времени
  • Конвертация в JSON, YAML или XML
  • Валидация синтаксиса с сообщениями об ошибках

Примеры

Манифест Cargo, определяющий метаданные пакета и зависимости.

[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

Попробовать →

Конфигурация проекта Python с системой сборки и метаданными.

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

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

Советы

  • TOML использует = для пар ключ-значение, в отличие от двоеточий YAML.
  • Строки должны быть в кавычках. Используйте """ для многострочных строк.
  • Таблицы ([table]) создают вложенные структуры.
  • Массивы таблиц используют синтаксис [[array]].

Описание Парсер TOML

TOML (Tom's Obvious Minimal Language) — формат конфигурационных файлов, спроектированный для однозначности и лёгкости чтения. Создан Томом Престон-Вернером (сооснователь GitHub), TOML чисто отображается на хеш-таблицу и намеренно проще YAML, но выразительнее INI-файлов. Версия 1.0.0 была финализирована в 2021 году.

Дизайн TOML сфокусирован на ясности. Ключи и значения используют простой синтаксис «key = value». Таблицы (секции) обозначаются [квадратными скобками], создавая вложенные структуры без чувствительности к отступам. Массивы таблиц используют [[двойные скобки]] для определения повторяющихся секций. TOML нативно поддерживает строки, целые числа, числа с плавающей точкой, булевы значения, даты, время и дату-время как первоклассные типы, устраняя неоднозначности разбора, характерные для JSON и YAML.

Экосистема Rust рано приняла TOML с Cargo.toml в качестве формата манифеста пакета. Python последовал с pyproject.toml (PEP 518 и PEP 621), сделав его современной заменой setup.py и setup.cfg. TOML также присутствует в инструментах Go, Deno (deno.toml), Hugo и многих других инструментах разработки, ценящих явную, читаемую конфигурацию.

TOML обменивает гибкость на предсказуемость. В отличие от YAML, существует только один способ представления каждой структуры данных. Нет якорей, псевдонимов, сюрпризов неявного приведения типов и значимых пробелов. Компромисс в том, что глубоко вложенные структуры становятся многословными, так как каждый уровень требует собственного заголовка таблицы.

TOML превосходен для плоских или умеренно вложенных конфигурационных файлов, которые часто редактируются людьми. Его однозначный синтаксис избегает ловушек YAML вроде приведения булевых значений и ошибок отступов, оставаясь при этом более читаемым, чем JSON для целей конфигурации. TOML — естественный выбор для манифестов проектов (Cargo.toml, pyproject.toml) и конфигурации инструментов. YAML остаётся лучше подходящим для глубоко вложенных структур вроде манифестов Kubernetes, а JSON — стандарт для обмена данными между системами.

Синтаксис [[двойных скобок]] создаёт массивы таблиц, где каждое вхождение заголовка добавляет новый элемент в массив. Например, [[products]], появляющийся три раза, создаёт массив из трёх объектов продуктов, каждый со своими парами ключ-значение, собранными по порядку. TOML также поддерживает однострочные комментарии с помощью символа решётки (#), которые могут располагаться на отдельной строке или после значения. Многострочных комментариев нет, но однострочный вариант всё же является значительным преимуществом по сравнению с JSON, который вообще не поддерживает комментарии.

Таблицы и инлайн-таблицы служат разным целям. Таблицы используют синтаксис [header] и занимают несколько строк, делая их читаемыми для секций с множеством ключей. Инлайн-таблицы используют фигурные скобки в одной строке (key = { a = 1, b = 2 }) и должны быть определены полностью в этой одной строке — их нельзя расширить после определения. Как правило, используйте стандартные таблицы для читаемости, когда секция содержит более двух-трёх ключей.

← Вернуться ко всем инструментам