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

خوادم LSP

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

يتكامل OpenCode مع بروتوكول خادم اللغة (LSP) لمساعدة LLM على التفاعل مع قاعدة الشيفرة لديك. ويستخدم التشخيصات لتزويد LLM بتغذية راجعة.


المدمجة

يأتي 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 تلقائيا عند اكتشاف أحد امتدادات الملفات المذكورة أعلاه واستيفاء المتطلبات.


كيف يعمل

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

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

الإعداد

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

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 على 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/licence.txt
  • على Windows: %USERPROFILE%/intelephense/licence.txt

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