تخطَّ إلى المحتوى

المُنسِّقات

يستخدم OpenCode مُنسِّقات خاصة بكل لغة.

يُنسِّق OpenCode الملفات تلقائيا بعد كتابتها أو تعديلها باستخدام مُنسِّقات خاصة بكل لغة. يضمن ذلك أن الشيفرة التي يتم توليدها تتبع أساليب التنسيق المعتمدة في مشروعك.


مُضمَّنة

يأتي OpenCode مع عدة مُنسِّقات مُضمَّنة للغات وأطر العمل الشائعة. فيما يلي قائمة بالمُنسِّقات وامتدادات الملفات المدعومة والأوامر أو خيارات الإعداد التي تحتاجها.

المُنسِّقالامتداداتالمتطلبات
gofmt.goيتوفر أمر gofmt
mix.ex, .exs, .eex, .heex, .leex, .neex, .sfaceيتوفر أمر mix
prettier.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml، وغير ذلكوجود اعتماد prettier في package.json
biome.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml، وغير ذلكملف إعداد biome.json(c)
zig.zig, .zonيتوفر أمر zig
clang-format.c, .cpp, .h, .hpp, .ino، وغير ذلكملف إعداد .clang-format
ktlint.kt, .ktsيتوفر أمر ktlint
ruff.py, .pyiيتوفر أمر ruff مع إعداد
rustfmt.rsيتوفر أمر rustfmt
cargofmt.rsيتوفر أمر cargo fmt
uv.py, .pyiيتوفر أمر uv
rubocop.rb, .rake, .gemspec, .ruيتوفر أمر rubocop
standardrb.rb, .rake, .gemspec, .ruيتوفر أمر standardrb
htmlbeautifier.erb, .html.erbيتوفر أمر htmlbeautifier
air.Rيتوفر أمر air
dart.dartيتوفر أمر dart
ocamlformat.ml, .mliيتوفر أمر ocamlformat وملف إعداد .ocamlformat
terraform.tf, .tfvarsيتوفر أمر terraform
gleam.gleamيتوفر أمر gleam
nixfmt.nixيتوفر أمر nixfmt
shfmt.sh, .bashيتوفر أمر shfmt
pint.phpوجود اعتماد laravel/pint في composer.json
oxfmt (Experimental).js, .jsx, .ts, .tsxوجود اعتماد oxfmt في package.json وعلم متغير بيئة تجريبي
ormolu.hsيتوفر أمر ormolu

لذا إذا كان مشروعك يتضمن prettier ضمن package.json، فسيستخدمه OpenCode تلقائيا.


كيف يعمل

عندما يكتب OpenCode ملفا أو يحرره، فإنه:

  1. يتحقق من امتداد الملف مقابل جميع المُنسِّقات المفعّلة.
  2. يشغّل أمر المُنسِّق المناسب على الملف.
  3. يطبق تغييرات التنسيق تلقائيا.

تتم هذه العملية في الخلفية لضمان الحفاظ على أساليب تنسيق الشيفرة دون أي خطوات يدوية.


الإعداد

يمكنك تخصيص المُنسِّقات عبر قسم formatter في إعدادات OpenCode.

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"formatter": {}
}

يدعم إعداد كل مُنسِّق ما يلي:

الخاصيةالنوعالوصف
disabledbooleanاضبطها على true لتعطيل المُنسِّق
commandstring[]الأمر الذي سيتم تشغيله للتنسيق
environmentobjectمتغيرات البيئة التي يتم ضبطها عند تشغيل المُنسِّق
extensionsstring[]امتدادات الملفات التي يجب أن يتعامل معها هذا المُنسِّق

لنلقِ نظرة على بعض الأمثلة.


تعطيل المُنسِّقات

لتعطيل جميع المُنسِّقات على مستوى عام، اضبط formatter على false:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"formatter": false
}

لتعطيل مُنسِّق محدد، اضبط disabled على true:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true
}
}
}

مُنسِّقات مخصّصة

يمكنك تجاوز المُنسِّقات المُضمَّنة أو إضافة مُنسِّقات جديدة عبر تحديد الأمر ومتغيرات البيئة وامتدادات الملفات:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
"environment": {
"NODE_ENV": "development"
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
},
"custom-markdown-formatter": {
"command": ["deno", "fmt", "$FILE"],
"extensions": [".md"]
}
}
}

سيتم استبدال العنصر النائب $FILE في الأمر بمسار الملف الذي يجري تنسيقه.