ToolDeck

فرمت‌کننده TOML

فایل‌های پیکربندی TOML را فرمت و اعتبارسنجی کنید

یک مثال امتحان کنید

ورودی TOML

TOML فرمت‌شده

به‌صورت محلی اجرا می‌شود · جای‌گذاری اسرار امن است
TOML فرمت‌شده اینجا نمایش داده می‌شود…
همچنین امتحان کنید:TOML به JSON

آخرین به‌روزرسانی: ۱۴۰۵ فروردین

فرمت‌بندی TOML چیست؟

TOML (زبان حداقلی آشکار تام) یک فرمت فایل پیکربندی است که تام پرستون-ورنر در سال ۲۰۱۳ طراحی کرد. این فرمت مستقیماً به یک جدول هش نگاشت می‌شود و از نوع‌گذاری صریح برای تمام مقادیر استفاده می‌کند. یک فرمت‌کننده TOML، فایل‌های خام یا دارای سبک ناهماهنگ را می‌گیرد و با فاصله‌گذاری یکنواخت، تورفتگی مناسب و ترتیب یکنواخت کلیدها، آن‌ها را دوباره سریال‌سازی می‌کند. نتیجه فایلی است که در سراسر پروژه از قراردادهای یکسانی پیروی می‌کند و بررسی تغییرات پیکربندی در diff‌ها را آسان‌تر می‌سازد.

مشخصات TOML v1.0.0 که در ژانویه ۲۰۲۱ نهایی شد، دستور زبان را به اندازه‌ای دقیق تعریف می‌کند که هر تجزیه‌کننده مطابق با استاندارد از همان ورودی، ساختار داده یکسانی تولید کند. فرمت‌بندی محتوای معنایی فایل TOML را تغییر نمی‌دهد؛ تنها فضای خالی، گروه‌بندی کلیدها و سبک نقل‌قول را تنظیم می‌کند. این یعنی می‌توانید فایل‌های TOML را آزادانه فرمت کنید بدون نگرانی از خراب شدن رفتار برنامه.

برخلاف JSON، TOML از توضیحات، انواع بومی تاریخ-زمان و چندین فرم رشته (پایه، تحت‌اللفظی و چندخطی) پشتیبانی می‌کند. یک فرمت‌کننده خوب توضیحات را حفظ می‌کند و تمایز بین جداول درون‌خطی و سرصفحه‌های جدول استاندارد را رعایت می‌کند. همچنین آرایه‌های جداول را به‌درستی مدیریت می‌کند و گروه‌بندی بخش‌ها را دست‌نخورده نگه می‌دارد تا فایل هم برای انسان و هم برای تجزیه‌کننده‌های مصرف‌کننده خوانا بماند.

After · toml
Before · 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 استفاده کنیم؟

فایل‌های پیکربندی با گذشت زمان و ویرایش توسط اعضای مختلف تیم، از نظر سبک دچار انحراف می‌شوند. تب‌ها با فاصله‌ها مخلوط می‌شوند، برخی کلیدها به‌صورت غیرضروری نقل‌قول‌گذاری می‌شوند و بخش‌های جدول گروه‌بندی بصری خود را از دست می‌دهند. یک فرمت‌کننده TOML همه این‌ها را در یک پاس نرمال‌سازی می‌کند.

فرمت‌بندی فوری
TOML فرمت‌نشده را بچسبانید و بلافاصله خروجی تمیز و با سبک یکنواخت دریافت کنید. نیازی به نصب CLI، راه‌اندازی پروژه یا انتظار برای مرحله build نیست.
🔒
پردازش کاملاً محلی
تمام تجزیه و فرمت‌بندی در مرورگر شما اجرا می‌شود. داده‌های پیکربندی شما، از جمله هرگونه اعتبارنامه یا نام‌های داخلی میزبان، هیچ‌گاه دستگاه شما را ترک نمی‌کنند.
اعتبارسنجی داخلی
فرمت‌کننده قبل از سریال‌سازی مجدد، TOML شما را تجزیه می‌کند. اگر ورودی دارای خطای نحوی باشد، یک پیام خطای واضح با خط مشکل‌دار دریافت می‌کنید؛ بنابراین فرمت‌بندی به‌عنوان اعتبارسنجی هم عمل می‌کند.
📋
بدون نیاز به حساب کاربری
صفحه را باز کنید و شروع به فرمت‌بندی کنید. هیچ ثبت‌نامی، هیچ محدودیت نرخی و هیچ ردیابی استفاده‌ای وجود ندارد. این ابزار در هر بازدید به‌طور یکسان کار می‌کند.

موارد استفاده از فرمت‌کننده TOML

توسعه فرانت‌اند
فایل‌های Wrangler.toml برای پروژه‌های Cloudflare Workers یا پیکربندی deno.toml برای فرانت‌اند‌های مبتنی بر Deno را فرمت کنید. فرمت‌بندی تمیز هنگام بررسی تنظیمات استقرار در pull request‌ها کمک می‌کند.
مهندسی بک‌اند
فایل‌های Cargo.toml را در چندین میکروسرویس Rust استانداردسازی کنید. فرمت‌بندی یکنواخت، اسکن نسخه‌های وابستگی و feature flag‌ها را در مخازن مختلف آسان می‌کند.
DevOps و CI/CD
فایل‌های پیکربندی مانند .goreleaser.toml، netlify.toml یا تنظیمات Starship را قبل از commit فرمت کنید. یک بررسی فرمت‌بندی به pipeline‌های CI اضافه کنید تا یکنواختی سبک را اجبار کنید.
QA و تست
فایل‌های آزمایشی را سریعاً فرمت کنید تا خوانا و قابل diff شوند. وقتی یک تست به‌دلیل تفاوت در پیکربندی ناموفق می‌شود، فایل‌های فرمت‌شده مقایسه actual در مقابل expected را آشکار می‌کنند.
مهندسی داده
تنظیمات Telegraf یا InfluxDB که pipeline‌های جمع‌آوری داده را تعریف می‌کنند فرمت کنید. این فایل‌ها اغلب به صدها خط می‌رسند و فرمت‌بندی یکنواخت آن‌ها را قابل نگهداری نگه می‌دارد.
یادگیری نحو TOML
مثال‌هایی از مستندات یا آموزش‌ها بچسبانید و ببینید که فرمت‌کننده چگونه آن‌ها را نرمال‌سازی می‌کند. این روشی سریع برای یادگیری سبک‌های کروشه، قوانین نقل‌قول‌گذاری و گروه‌بندی‌های کانونی جداول است.

مرجع نحو TOML

TOML مجموعه کوچکی از سازه‌ها دارد. جدول زیر تمام عناصر ساختاری تعریف‌شده در مشخصات TOML v1.0.0 را فهرست می‌کند. یک فرمت‌کننده فاصله‌گذاری و گروه‌بندی یکنواخت روی همه این‌ها اعمال می‌کند.

نحونامیادداشت
key = "value"Basic key-value pairKeys are bare or quoted; values are typed
[table]Standard tableCreates a named section (hash table)
[a.b.c]Dotted tableShorthand for nested tables
[[array]]Array of tablesEach [[name]] block appends to an array
key = """...\n"""Multi-line basic stringAllows newlines, escapes processed
key = '''...\n'''Multi-line literal stringAllows newlines, no escape processing
# commentCommentExtends to end of line; not in JSON output
{inline = true}Inline tableSingle-line table, no newlines allowed

مقایسه TOML با JSON و YAML

TOML، JSON و YAML مشکلات مشابهی را حل می‌کنند اما مزایا و معایب متفاوتی دارند.

ویژگیTOMLJSONYAML
توضیحات# توضیحات خطیپشتیبانی نمی‌شود# توضیحات خطی
مقادیر نوع‌گذاری‌شدهرشته، عدد صحیح، اعشاری، بولی، تاریخ-زمانرشته، عدد، بولی، nullضمنی (مستعد خطا)
تودرتوییسرصفحه‌های [جدول]آکولادمبتنی بر تورفتگی
دقت مشخصاتدقیق (یک نتیجه تجزیه)دقیق (RFC 8259)شل (چندین تجزیه معتبر)
پشتیبانی از تاریخ/زمان۴ نوع بومیندارد (از رشته استفاده کنید)ضمنی (شکننده)
کاما انتهاییمجاز نیستمجاز نیستندارد (بدون کاما)

مثال‌های کد

مثال‌های زیر به‌صورت برنامه‌نویسی TOML را در زبان‌ها و ابزارهای مختلف فرمت می‌کنند. هر کدام یک فایل می‌خواند، آن را تجزیه می‌کند و نسخه فرمت‌شده را می‌نویسد.

JavaScript (Node.js)
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.toml
Python
import 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.toml
Go
package 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())
}
CLI (taplo)
# 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

سوالات متداول

یک فرمت‌کننده TOML چه کاری انجام می‌دهد؟
یک فرمت‌کننده TOML فایل را به یک ساختار داده تجزیه می‌کند، سپس آن را با فضای خالی یکنواخت، ترتیب کلیدها و سبک نقل‌قول مجدداً سریال‌سازی می‌کند. محتوای معنایی دست‌نخورده می‌ماند. تنها ارائه بصری تغییر می‌کند: فاصله‌گذاری دور علامت مساوی، خطوط خالی بین بخش‌های جدول و تورفتگی مقادیر تودرتو.
آیا فرمت‌بندی TOML برای فایل‌های پیکربندی تولید امن است؟
بله. فرمت‌بندی تنها فضای خالی و جزئیات ظاهری را تغییر می‌دهد. ساختار داده تجزیه‌شده قبل و بعد از فرمت‌بندی یکسان است. اگر فرمت‌کننده با ورودی نامعتبر مواجه شود، به‌جای تولید خروجی خراب، یک خطا گزارش می‌دهد. می‌توانید این را با تجزیه هر دو نسخه و مقایسه اشیاء حاصل تأیید کنید.
تفاوت TOML با JSON چیست؟
TOML از توضیحات، انواع بومی تاریخ-زمان، رشته‌های چندخطی و سرصفحه‌های جدول برای سازماندهی داده‌های تودرتو پشتیبانی می‌کند. JSON هیچ‌کدام از این‌ها را ندارد. این فرمت برای فایل‌های پیکربندی که انسان‌ها می‌خوانند و ویرایش می‌کنند طراحی شده است. JSON برای تبادل داده بین برنامه‌ها طراحی شده. نمی‌توانید در JSON از توضیحات استفاده کنید، که مستندسازی تصمیمات پیکربندی به‌صورت درون‌خطی را دشوار می‌کند.
آیا می‌توانم TOML را از خط فرمان فرمت کنم؟
بله. Taplo پرکاربردترین CLI فرمت‌کننده TOML است. آن را با cargo install taplo-cli یا npm install -g @taplo/cli نصب کنید، سپس taplo fmt را اجرا کنید تا تمام فایل‌های .toml پروژه را فرمت کند. از پیکربندی از طریق فایل taplo.toml یا .taplo.toml برای قوانین سفارشی پشتیبانی می‌کند.
آیا فرمت‌بندی توضیحات را در فایل‌های TOML حفظ می‌کند؟
این فرمت‌کننده مبتنی بر مرورگر ورودی را به ساختار داده تجزیه و دوباره سریال‌سازی می‌کند، که توضیحات را حذف می‌کند. اگر نیاز به حفظ توضیحات دارید، از ابزار مبتنی بر CST مانند Taplo (CLI) یا toml-edit (کتابخانه Rust) استفاده کنید که روی درخت نحو مشخص به‌جای داده تجزیه‌شده عمل می‌کنند.
تفاوت بین فرمت‌بندی TOML و اعتبارسنجی TOML چیست؟
اعتبارسنجی بررسی می‌کند که آیا فایل با مشخصات مطابقت دارد و در صورت عدم مطابقت خطا گزارش می‌دهد. فرمت‌بندی یک گام فراتر می‌رود: ورودی را اعتبارسنجی می‌کند، سپس آن را با سبک نرمال‌سازی‌شده بازنویسی می‌کند. هر عملیات فرمت‌بندی اعتبارسنجی را به‌عنوان اولین گام شامل می‌شود، بنابراین فایلی که با موفقیت فرمت می‌شود تضمیناً معتبر است.
کدام پروژه‌ها از TOML به‌عنوان فرمت پیکربندی استفاده می‌کنند؟
Cargo در Rust (Cargo.toml)، اکوسیستم بسته‌بندی Python (pyproject.toml)، سایت‌های استاتیک Hugo، Deno (deno.toml)، Cloudflare Workers (wrangler.toml)، InfluxDB، Telegraf و Starship prompt همگی از TOML استفاده می‌کنند. این فرمت پس از اینکه Rust آن را در سال ۲۰۱۵ به‌عنوان استاندارد مانیفست بسته پذیرفت، محبوبیت پیدا کرد.