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

خوادم LSP

يتكامل OpenCode مع خوادم LSP لديك.

يمكن أن يتكامل OpenCode مع خوادم Language Server Protocol (LSP) لاستخدام التشخيصات كملاحظات للوكيل.


المدمجة

يأتي OpenCode مع عدة خوادم LSP مدمجة للغات الشائعة:

خادم LSPالامتداداتالمتطلبات
astro.astroيثبت تلقائيا لمشاريع Astro
bash.sh, .bash, .zsh, .kshيثبت bash-language-server تلقائيا
clangd.c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++يثبت تلقائيا لمشاريع C/C++
csharp.csتثبيت .NET SDK
clojure-lsp.clj, .cljs, .cljc, .ednتوفر أمر clojure-lsp
dart.dartتوفر أمر dart
deno.ts, .tsx, .js, .jsx, .mjsتوفر أمر deno (يكتشف تلقائيا deno.json/deno.jsonc)
elixir-ls.ex, .exsتوفر أمر elixir
eslint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vueوجود تبعية eslint في المشروع
fsharp.fs, .fsi, .fsx, .fsscriptتثبيت .NET SDK
gleam.gleamتوفر أمر gleam
gopls.goتوفر أمر go
hls.hs, .lhsتوفر أمر haskell-language-server-wrapper
jdtls.javaتثبيت Java SDK (version 21+)
kotlin-ls.kt, .ktsيثبت تلقائيا لمشاريع Kotlin
lua-ls.luaيثبت تلقائيا لمشاريع Lua
nixd.nixتوفر أمر nixd
ocaml-lsp.ml, .mliتوفر أمر ocamllsp
oxlint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelteوجود تبعية oxlint في المشروع
php intelephense.phpيثبت تلقائيا لمشاريع PHP
prisma.prismaتوفر أمر prisma
pyright.py, .pyiتثبيت تبعية pyright
ruby-lsp (rubocop).rb, .rake, .gemspec, .ruتوفر أمري ruby و gem
rust.rsتوفر أمر rust-analyzer
sourcekit-lsp.swift, .objc, .objcppتثبيت swift (على macOS عبر xcode)
svelte.svelteيثبت تلقائيا لمشاريع Svelte
terraform.tf, .tfvarsيثبت تلقائيا من إصدارات GitHub
tinymist.typ, .typcيثبت تلقائيا من إصدارات GitHub
typescript.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .ctsوجود تبعية typescript في المشروع
vue.vueيثبت تلقائيا لمشاريع Vue
yaml-ls.yaml, .ymlيثبت yaml-language-server من Red Hat تلقائيا
zls.zig, .zonتوفر أمر zig

تكون ميزة LSP معطلة افتراضيا. عند تفعيلها، تبدأ الخوادم عند اكتشاف أحد امتدادات الملفات المذكورة أعلاه واستيفاء المتطلبات.


كيف يعمل

عند تفعيل LSP وفتح opencode لملف، فإنه:

  1. يفحص امتداد الملف مقابل جميع خوادم LSP المفعّلة.
  2. يشغّل خادم LSP المناسب إذا لم يكن قيد التشغيل بالفعل.

أفضل الممارسات

يمكن أن تساعد LSP الوكيل على العثور على المشاكل وإصلاحها عبر توفير التشخيصات من خوادم اللغة. هذا مفيد في بعض المشاريع، لكنه ليس دائما مكسبا صافيا.

قد تخرج خوادم اللغة عن المزامنة، وتستهلك ذاكرة كبيرة، وتختلف حسب الإصدار أو المشروع، وتبطئ سير عمل الوكيل. في كثير من المشاريع، يكون من الأفضل أن يشغّل الوكيل lint أو typecheck أو أدوات CLI التشخيصية الأخرى مباشرة، بحيث تعود الأخطاء إلى حلقة الوكيل دون هذه المفاضلات. وثّق هذه الأوامر في ملفات التعليمات مثل AGENTS.md أو المهارات حتى يعرف الوكيل ما يجب تشغيله. فعّل LSP عندما يستفيد مشروعك من ملاحظات إضافية من خادم اللغة.


الإعداد

يمكنك تفعيل خوادم LSP وتخصيصها عبر قسم lsp في إعدادات opencode.

لتفعيل جميع خوادم LSP المدمجة، اضبط lsp على true.

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

استخدم كائنا لإبقاء الخوادم المدمجة مفعلة أثناء إعداد التجاوزات أو الخوادم المخصصة.

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

يدعم كل خادم LSP ما يلي:

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

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


متغيرات البيئة

استخدم الخاصية env لضبط متغيرات البيئة عند تشغيل خادم LSP:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug"
}
}
}
}

خيارات التهيئة

استخدم الخاصية initialization لتمرير خيارات التهيئة إلى خادم LSP. هذه إعدادات خاصة بالخادم تُرسل أثناء طلب LSP initialize:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}

تعطيل خوادم LSP

إذا تم حذف lsp، فستكون جميع خوادم LSP معطلة. لتعطيل جميع خوادم LSP بعد أن فعّلها إعداد آخر، اضبط lsp على false:

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

لتعطيل خادم LSP بعينه، اضبط disabled على true:

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

خوادم LSP مخصصة

يمكنك إضافة خوادم LSP مخصصة عبر تحديد الأمر وامتدادات الملفات:

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}

معلومات إضافية

PHP Intelephense

يوفر PHP Intelephense ميزات مدفوعة عبر مفتاح ترخيص. يمكنك تزويده بمفتاح الترخيص عبر وضع (فقط) المفتاح داخل ملف نصي في:

  • على macOS/Linux: $HOME/intelephense/license.txt
  • على Windows: %USERPROFILE%/intelephense/license.txt

يجب أن يحتوي الملف على مفتاح الترخيص فقط دون أي محتوى إضافي.