Skip to content

LSP เซิร์ฟเวอร์

OpenCode ทำงานร่วมกับเซิร์ฟเวอร์ LSP ของคุณ

OpenCode สามารถทำงานร่วมกับเซิร์ฟเวอร์ Language Server Protocol (LSP) เพื่อใช้ diagnostics เป็น feedback สำหรับ agent


บิวท์อิน

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, .ednclojure-lsp คำสั่งใช้ได้
dart.dartdart คำสั่งใช้ได้
deno.ts, .tsx, .js, .jsx, .mjsมีคำสั่ง deno (ตรวจจับอัตโนมัติ deno.json/deno.jsonc)
elixir-ls.ex, .exselixir คำสั่งใช้ได้
eslint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vueeslint การพึ่งพาในโครงการ
fsharp.fs, .fsi, .fsx, .fsscript.NET SDK ติดตั้งแล้ว
gleam.gleamgleam คำสั่งใช้ได้
gopls.gogo คำสั่งใช้ได้
hls.hs, .lhshaskell-language-server-wrapper คำสั่งใช้ได้
jdtls.javaJava SDK (version 21+) ติดตั้งแล้ว
julials.jlติดตั้ง julia และ LanguageServer.jl แล้ว
kotlin-ls.kt, .ktsติดตั้งอัตโนมัติสำหรับโปรเจ็กต์ Kotlin
lua-ls.luaติดตั้งอัตโนมัติสำหรับโปรเจ็กต์ Lua
nixd.nixnixd คำสั่งใช้ได้
ocaml-lsp.ml, .mliocamllsp คำสั่งใช้ได้
oxlint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelteoxlint การพึ่งพาในโครงการ
php intelephense.phpติดตั้งอัตโนมัติสำหรับโครงการ PHP
prisma.prismaprisma คำสั่งใช้ได้
pyright.py, .pyipyright ติดตั้งการพึ่งพาแล้ว
ruby-lsp (rubocop).rb, .rake, .gemspec, .ruมีคำสั่ง ruby และ gem
rust.rsrust-analyzer คำสั่งใช้ได้
sourcekit-lsp.swift, .objc, .objcppติดตั้ง swift (xcode บน macOS)
svelte.svelteติดตั้งอัตโนมัติสำหรับโครงการ Svelte
terraform.tf, .tfvarsติดตั้งอัตโนมัติจากรุ่น GitHub
tinymist.typ, .typcติดตั้งอัตโนมัติจากรุ่น GitHub
typescript.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .ctstypescript การพึ่งพาในโครงการ
vue.vueติดตั้งอัตโนมัติสำหรับโปรเจ็กต์ Vue
yaml-ls.yaml, .ymlติดตั้งเซิร์ฟเวอร์ภาษา Red Hat yaml โดยอัตโนมัติ
zls.zig, .zonzig คำสั่งใช้ได้

LSP ปิดใช้งานเป็นค่าเริ่มต้น เมื่อเปิดใช้งาน เซิร์ฟเวอร์จะเริ่มทำงานเมื่อตรวจพบนามสกุลไฟล์ข้างต้นและเป็นไปตามข้อกำหนด


มันทำงานอย่างไร

เมื่อเปิดใช้งาน LSP และ opencode เปิดไฟล์ มันจะ:

  1. ตรวจสอบนามสกุลไฟล์กับเซิร์ฟเวอร์ LSP ที่เปิดใช้งานทั้งหมด
  2. เริ่มเซิร์ฟเวอร์ LSP ที่เหมาะสมหากยังไม่ได้ทำงาน

แนวทางปฏิบัติที่แนะนำ

LSP สามารถช่วยให้ agent ค้นหาและแก้ไขปัญหาโดยให้ diagnostics จากเซิร์ฟเวอร์ภาษา สิ่งนี้มีประโยชน์ในบางโปรเจ็กต์ แต่ไม่ได้เป็นผลบวกเสมอไป

เซิร์ฟเวอร์ภาษาอาจไม่ตรงกับสถานะโปรเจ็กต์ ใช้หน่วยความจำมาก แตกต่างกันตามเวอร์ชันหรือโปรเจ็กต์ และทำให้เวิร์กโฟลว์ของ agent ช้าลง ในหลายโปรเจ็กต์ การให้ agent รัน lint, typecheck หรือเครื่องมือ CLI สำหรับ diagnostics อื่นโดยตรงจะดีกว่า เพราะข้อผิดพลาดจะถูกส่งกลับเข้า loop ของ agent โดยไม่มีข้อแลกเปลี่ยนเหล่านี้ ระบุคำสั่งเหล่านี้ไว้ในไฟล์คำแนะนำ เช่น AGENTS.md หรือ skills เพื่อให้ agent รู้ว่าต้องรันอะไร เปิดใช้งาน LSP เมื่อโปรเจ็กต์ของคุณได้ประโยชน์จาก feedback เพิ่มเติมของเซิร์ฟเวอร์ภาษา


กำหนดค่า

คุณสามารถเปิดใช้งานและปรับแต่งเซิร์ฟเวอร์ 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 แต่ละเซิร์ฟเวอร์รองรับสิ่งต่อไปนี้:

คุณสมบัติพิมพ์คำอธิบาย
disabledบูลีนตั้งค่านี้เป็น true เพื่อปิดการใช้งานเซิร์ฟเวอร์ LSP
commandสตริง[]คำสั่งเพื่อเริ่มต้นเซิร์ฟเวอร์ LSP
extensionsสตริง[]นามสกุลไฟล์ที่เซิร์ฟเวอร์ LSP นี้ควรจัดการ
envวัตถุตัวแปรสภาพแวดล้อมที่จะตั้งค่าเมื่อเริ่มต้นเซิร์ฟเวอร์
initializationวัตถุตัวเลือกการเริ่มต้นที่จะส่งไปยังเซิร์ฟเวอร์ 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 เพื่อปิดใช้งานเซิร์ฟเวอร์ LSP ทั้งหมด:

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 อินเทเลฟินส์

PHP Intelephense นำเสนอคุณสมบัติระดับพรีเมียมผ่านรหัสลิขสิทธิ์ คุณสามารถระบุรหัสสัญญาอนุญาตได้โดยการวาง (เท่านั้น) รหัสในไฟล์ข้อความที่:

  • บน macOS/Linux: $HOME/intelephense/license.txt
  • บน Windows: %USERPROFILE%/intelephense/license.txt

ไฟล์ควรมีเฉพาะรหัสลิขสิทธิ์โดยไม่มีเนื้อหาเพิ่มเติม