Последнее обновление: апрель 2026 г.
Что такое форматирование TOML?
TOML (Tom's Obvious Minimal Language) — формат конфигурационных файлов, созданный Томом Престон-Вернером в 2013 году. Он напрямую отображается в хеш-таблицу и использует явную типизацию для всех значений. TOML-форматтер берёт сырой или непоследовательно оформленный TOML и повторно сериализует его с единообразными пробелами, правильными отступами и каноническим порядком ключей. Результат — файл, который следует одним и тем же соглашениям во всём проекте, что упрощает проверку изменений конфигурации в диффах.
Спецификация TOML v1.0.0, окончательно утверждённая в январе 2021 года, определяет грамматику достаточно строго: любой совместимый парсер производит идентичную структуру данных из одних и тех же входных данных. Форматирование не изменяет семантического содержимого TOML-файла — оно корректирует только пробельные символы, группировку ключей и стиль кавычек. Это означает, что вы можете форматировать TOML-файлы без риска нарушить поведение приложения.
В отличие от JSON, TOML поддерживает комментарии, нативные типы даты и времени, а также несколько форм строк (базовые, литеральные и многострочные). Хороший форматтер сохраняет комментарии и учитывает различие между инлайн-таблицами и стандартными заголовками таблиц. Он также корректно обрабатывает массивы таблиц, сохраняя группировку секций, чтобы файл оставался читаемым как для людей, так и для парсеров.
title="My App" version="1.0.0" debug=false [database] host="localhost" port=5432 name="mydb" [database.pool] max_connections=25 timeout=30 [[servers]] name="web" host="web.example.com" [[servers]] name="api" host="api.example.com"
title = "My App" version = "1.0.0" debug = false [database] host = "localhost" port = 5432 name = "mydb" [database.pool] max_connections = 25 timeout = 30 [[servers]] name = "web" host = "web.example.com" [[servers]] name = "api" host = "api.example.com"
Зачем использовать TOML Formatter?
Конфигурационные файлы накапливают стилистические расхождения по мере того, как их редактируют разные члены команды. Табуляции смешиваются с пробелами, некоторые ключи цитируются без необходимости, а секции таблиц теряют визуальную группировку. TOML-форматтер нормализует всё это за один проход.
Сценарии использования TOML Formatter
Справочник по синтаксису TOML
TOML имеет небольшой набор конструкций. В таблице ниже перечислены все структурные элементы, определённые в спецификации TOML v1.0.0. Форматтер применяет единообразные пробелы и группировку ко всем из них.
| Синтаксис | Название | Примечания |
|---|---|---|
| key = "value" | Basic key-value pair | Keys are bare or quoted; values are typed |
| [table] | Standard table | Creates a named section (hash table) |
| [a.b.c] | Dotted table | Shorthand for nested tables |
| [[array]] | Array of tables | Each [[name]] block appends to an array |
| key = """...\n""" | Multi-line basic string | Allows newlines, escapes processed |
| key = '''...\n''' | Multi-line literal string | Allows newlines, no escape processing |
| # comment | Comment | Extends to end of line; not in JSON output |
| {inline = true} | Inline table | Single-line table, no newlines allowed |
TOML vs JSON vs YAML
TOML, JSON и YAML решают схожие задачи, но с разными компромиссами.
| Возможность | TOML | JSON | YAML |
|---|---|---|---|
| Комментарии | # однострочные комментарии | Не поддерживаются | # однострочные комментарии |
| Типизированные значения | String, int, float, bool, datetime | String, number, bool, null | Выводятся автоматически (ненадёжно) |
| Вложенность | Заголовки [table] | Фигурные скобки | На основе отступов |
| Строгость спецификации | Строгая (один результат парсинга) | Строгая (RFC 8259) | Нестрогая (несколько допустимых парсингов) |
| Поддержка даты/времени | 4 нативных типа | Отсутствует (используйте строки) | Неявная (ненадёжная) |
| Завершающие запятые | Не допускаются | Не допускаются | Н/Д (запятые не используются) |
Примеры кода
Примеры ниже показывают программное форматирование TOML на разных языках и инструментах. Каждый читает файл, парсит его и записывает отформатированную версию.
import { parse, stringify } from '@iarna/toml'
import fs from 'fs'
const raw = fs.readFileSync('config.toml', 'utf-8')
const doc = parse(raw)
const formatted = stringify(doc)
// stringify() outputs canonical TOML with consistent spacing
fs.writeFileSync('config.toml', formatted)
// Quick one-liner with npx:
// npx taplo fmt config.tomlimport tomllib # Python 3.11+ (read-only)
import tomli_w # pip install tomli-w (write)
# Parse and re-serialize to format
with open("config.toml", "rb") as f:
data = tomllib.load(f)
formatted = tomli_w.dumps(data)
# tomli_w produces sorted keys, consistent quoting, and
# proper whitespace around = signs
print(formatted)
# CLI alternative: taplo fmt config.tomlpackage main
import (
"fmt"
"os"
"github.com/BurntSushi/toml"
"bytes"
)
func main() {
var data map[string]interface{}
_, err := toml.DecodeFile("config.toml", &data)
if err != nil {
fmt.Fprintln(os.Stderr, err) // parse error with line number
os.Exit(1)
}
var buf bytes.Buffer
enc := toml.NewEncoder(&buf)
enc.Indent = " "
enc.Encode(data) // re-serialized with consistent formatting
fmt.Print(buf.String())
}# Install taplo — the standard TOML toolkit cargo install taplo-cli # or: npm install -g @taplo/cli # Format a single file in place taplo fmt config.toml # Format all .toml files in a project taplo fmt # Check formatting without modifying (CI-friendly) taplo fmt --check # Validate TOML syntax without formatting taplo lint config.toml