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, .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+) ติดตั้งแล้ว |
| julials | .jl | ติดตั้ง julia และ LanguageServer.jl แล้ว |
| 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 (xcode บน macOS) |
| 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 | ติดตั้งเซิร์ฟเวอร์ภาษา Red Hat yaml โดยอัตโนมัติ |
| zls | .zig, .zon | zig คำสั่งใช้ได้ |
LSP ปิดใช้งานเป็นค่าเริ่มต้น เมื่อเปิดใช้งาน เซิร์ฟเวอร์จะเริ่มทำงานเมื่อตรวจพบนามสกุลไฟล์ข้างต้นและเป็นไปตามข้อกำหนด
มันทำงานอย่างไร
เมื่อเปิดใช้งาน LSP และ opencode เปิดไฟล์ มันจะ:
- ตรวจสอบนามสกุลไฟล์กับเซิร์ฟเวอร์ LSP ที่เปิดใช้งานทั้งหมด
- เริ่มเซิร์ฟเวอร์ LSP ที่เหมาะสมหากยังไม่ได้ทำงาน
แนวทางปฏิบัติที่แนะนำ
LSP สามารถช่วยให้ agent ค้นหาและแก้ไขปัญหาโดยให้ diagnostics จากเซิร์ฟเวอร์ภาษา สิ่งนี้มีประโยชน์ในบางโปรเจ็กต์ แต่ไม่ได้เป็นผลบวกเสมอไป
เซิร์ฟเวอร์ภาษาอาจไม่ตรงกับสถานะโปรเจ็กต์ ใช้หน่วยความจำมาก แตกต่างกันตามเวอร์ชันหรือโปรเจ็กต์ และทำให้เวิร์กโฟลว์ของ agent ช้าลง ในหลายโปรเจ็กต์ การให้ agent รัน lint, typecheck หรือเครื่องมือ CLI สำหรับ diagnostics อื่นโดยตรงจะดีกว่า เพราะข้อผิดพลาดจะถูกส่งกลับเข้า loop ของ agent โดยไม่มีข้อแลกเปลี่ยนเหล่านี้ ระบุคำสั่งเหล่านี้ไว้ในไฟล์คำแนะนำ เช่น AGENTS.md หรือ skills เพื่อให้ agent รู้ว่าต้องรันอะไร เปิดใช้งาน LSP เมื่อโปรเจ็กต์ของคุณได้ประโยชน์จาก feedback เพิ่มเติมของเซิร์ฟเวอร์ภาษา
กำหนดค่า
คุณสามารถเปิดใช้งานและปรับแต่งเซิร์ฟเวอร์ LSP ผ่านส่วน lsp ในการกำหนดค่า opencode
หากต้องการเปิดใช้งานเซิร์ฟเวอร์ LSP ในตัวทั้งหมด ให้ตั้งค่า lsp เป็น true
{ "$schema": "https://opencode.ai/config.json", "lsp": true}ใช้อ็อบเจ็กต์เพื่อให้เซิร์ฟเวอร์ในตัวยังคงเปิดใช้งานอยู่ พร้อมกำหนดค่าการแทนที่หรือเซิร์ฟเวอร์แบบกำหนดเอง
{ "$schema": "https://opencode.ai/config.json", "lsp": {}}เซิร์ฟเวอร์ LSP แต่ละเซิร์ฟเวอร์รองรับสิ่งต่อไปนี้:
| คุณสมบัติ | พิมพ์ | คำอธิบาย |
|---|---|---|
disabled | บูลีน | ตั้งค่านี้เป็น true เพื่อปิดการใช้งานเซิร์ฟเวอร์ LSP |
command | สตริง[] | คำสั่งเพื่อเริ่มต้นเซิร์ฟเวอร์ LSP |
extensions | สตริง[] | นามสกุลไฟล์ที่เซิร์ฟเวอร์ LSP นี้ควรจัดการ |
env | วัตถุ | ตัวแปรสภาพแวดล้อมที่จะตั้งค่าเมื่อเริ่มต้นเซิร์ฟเวอร์ |
initialization | วัตถุ | ตัวเลือกการเริ่มต้นที่จะส่งไปยังเซิร์ฟเวอร์ LSP |
ลองดูตัวอย่างบางส่วน
ตัวแปรสภาพแวดล้อม
ใช้คุณสมบัติ env เพื่อตั้งค่าตัวแปรสภาพแวดล้อมเมื่อเริ่มต้นเซิร์ฟเวอร์ LSP:
{ "$schema": "https://opencode.ai/config.json", "lsp": { "rust": { "env": { "RUST_LOG": "debug" } } }}ตัวเลือกการเริ่มต้น
ใช้คุณสมบัติ initialization เพื่อส่งตัวเลือกการเริ่มต้นไปยังเซิร์ฟเวอร์ LSP นี่คือการตั้งค่าเฉพาะเซิร์ฟเวอร์ที่ส่งระหว่างคำขอ LSP initialize:
{ "$schema": "https://opencode.ai/config.json", "lsp": { "typescript": { "initialization": { "preferences": { "importModuleSpecifierPreference": "relative" } } } }}ปิดการใช้งานเซิร์ฟเวอร์ LSP
หากละเว้น lsp เซิร์ฟเวอร์ LSP ทั้งหมดจะถูกปิดใช้งาน หากการกำหนดค่าอื่นเปิดใช้งาน LSP ไว้ ให้ตั้งค่า lsp เป็น false เพื่อปิดใช้งานเซิร์ฟเวอร์ LSP ทั้งหมด:
{ "$schema": "https://opencode.ai/config.json", "lsp": false}หากต้องการปิดการใช้งานเซิร์ฟเวอร์ เฉพาะ LSP ให้ตั้งค่า disabled เป็น true:
{ "$schema": "https://opencode.ai/config.json", "lsp": { "typescript": { "disabled": true } }}เซิร์ฟเวอร์ LSP แบบกำหนดเอง
คุณสามารถเพิ่มเซิร์ฟเวอร์ LSP แบบกำหนดเองได้โดยระบุคำสั่งและนามสกุลไฟล์:
{ "$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
ไฟล์ควรมีเฉพาะรหัสลิขสิทธิ์โดยไม่มีเนื้อหาเพิ่มเติม