Przejdź do głównej zawartości

Serwery LSP

OpenCode integruje się z serwerami LSP.

OpenCode może integrować się z serwerami Language Server Protocol (LSP), aby używać diagnostyki jako informacji zwrotnej dla agenta.


Wbudowane

OpenCode posiada kilka wbudowanych serwerów LSP dla następujących języków:

Serwer LSPRozszerzeniaWymagania
astro.astroAutomatyczna instalacja dla Astro
bash.sh, .bash, .zsh, .kshAutomatycznie instaluje serwer języka bash
clangd.c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++Automatyczna instalacja dla C/C++
csharp.csZainstalowany .NET SDK
clojure-lsp.clj, .cljs, .cljc, .ednDostępne polecenie clojure-lsp
dart.dartDostępne polecenie dart
deno.ts, .tsx, .js, .jsx, .mjsDostępne polecenie deno (automatyczne wykrywanie deno.json/deno.jsonc)
elixir-ls.ex, .exsDostępne polecenie elixir
eslint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vueZależność eslint w projekcie
fsharp.fs, .fsi, .fsx, .fsscriptZainstalowany .NET SDK
gleam.gleamDostępne polecenie gleam
gopls.goDostępne polecenie go
hls.hs, .lhsDostępne polecenie haskell-language-server-wrapper
jdtls.javaZainstalowany Java SDK (version 21+)
julials.jlZainstalowane julia i LanguageServer.jl
kotlin-ls.kt, .ktsAutomatyczna instalacja dla Kotlin
lua-ls.luaAutomatyczna instalacja dla Lua
nixd.nixDostępne polecenie nixd
ocaml-lsp.ml, .mliDostępne polecenie ocamllsp
oxlint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelteZależność oxlint w projekcie
php intelephense.phpAutomatyczna instalacja dla PHP
prisma.prismaDostępne polecenie prisma
pyright.py, .pyiZainstalowana zależność pyright
ruby-lsp (rubocop).rb, .rake, .gemspec, .ruDostępne polecenie ruby i gem
rust.rsDostępne polecenie rust-analyzer
sourcekit-lsp.swift, .objc, .objcppZainstalowany swift (xcode na macOS)
svelte.svelteAutomatyczna instalacja dla aplikacji Svelte
terraform.tf, .tfvarsAutomatyczna instalacja z wydań GitHub
tinymist.typ, .typcAutomatyczna instalacja z wydań GitHub
typescript.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .ctsZależność typescript w projekcie
vue.vueAutomatyczna instalacja dla Vue
yaml-ls.yaml, .ymlAutomatycznie instaluje serwer języka yaml Red Hat
zls.zig, .zonDostępne polecenie zig

LSP jest domyślnie wyłączone. Gdy jest włączone, serwery uruchamiają się po wykryciu jednego z obsługiwanych rozszerzeń plików i spełnieniu wymagań.


Jak to działa

Gdy LSP jest włączony i OpenCode otwiera plik:

  1. Sprawdza plik pod kątem wszystkich dostępnych serwerów LSP.
  2. Uruchamia odpowiedni serwer LSP, jeśli jeszcze nie działa.

Dobre praktyki

LSP może pomóc agentowi znajdować i naprawiać problemy, dostarczając diagnostykę z serwerów językowych. Jest to przydatne w niektórych projektach, ale nie zawsze jest jednoznaczną korzyścią.

Serwery językowe mogą wypaść z synchronizacji, zużywać dużo pamięci, różnić się między wersjami lub projektami i spowalniać workflow agenta. W wielu projektach lepiej, aby agent uruchamiał lint, typecheck lub inne diagnostyczne narzędzia CLI bezpośrednio; wtedy błędy wracają do pętli agenta bez tych kompromisów. Udokumentuj te komendy w plikach instrukcji, takich jak AGENTS.md lub skills, aby agent wiedział, co uruchomić. Włącz LSP, gdy Twój projekt korzysta z dodatkowej informacji zwrotnej z serwera językowego.


Konfiguracja

Możesz włączać i dostosowywać serwery LSP poprzez sekcję lsp w konfiguracji OpenCode.

Aby włączyć wszystkie wbudowane serwery LSP, ustaw lsp na true.

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

Użyj obiektu, aby pozostawić wbudowane serwery włączone i jednocześnie skonfigurować nadpisania lub serwery niestandardowe.

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

Każdy serwer LSP obsługuje następujące właściwości:

WłaściwośćTypOpis
disabledbooleanUstaw na true, aby wyłączyć ten serwer LSP
commandstring[]Polecenie uruchomienia serwera LSP
extensionsstring[]Rozszerzenia plików, które powinny używać tego serwera
envobjectZmienne środowiskowe ustawiane podczas uruchamiania
initializationobjectOpcje inicjalizacji do wysłania do serwera LSP

Spójrzmy na kilka przykładów.


Zmienne środowiskowe

Użyj env, aby ustawić zmienne środowiskowe podczas uruchamiania serwera LSP:

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

Opcje inicjalizacji

Użyj właściwości initialization, aby przekazać niestandardowe opcje inicjalizacji do serwera LSP. Są one wysyłane w żądaniu initialize protokołu LSP:

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

Wyłączanie serwerów LSP

Jeśli lsp zostanie pominięte, wszystkie serwery LSP są wyłączone. Aby wyłączyć wszystkie serwery LSP po tym, jak inna konfiguracja je włączyła, ustaw lsp na false:

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

Aby wyłączyć określony serwer LSP, ustaw disabled na true:

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

Niestandardowe serwery LSP

Możesz dodać niestandardowe serwery LSP, podając polecenie i rozszerzenia plików:

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

Dodatkowe informacje

PHP Intelephense

PHP Intelephense oferuje funkcje premium poprzez klucz licencyjny. Możesz użyć klucza licencyjnego, umieszczając go (sam klucz) w pliku tekstowym pod adresem:

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

Plik powinien zawierać wyłącznie klucz licencyjny, bez białych znaków.