File size: 10,828 Bytes
0dbc9de | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | ---
title: Server LSP
description: OpenCode si integra con i tuoi server LSP.
---
OpenCode può integrarsi con server Language Server Protocol (LSP) per usare la diagnostica come feedback per l'agente.
---
## Integrati
OpenCode include diversi server LSP integrati per linguaggi popolari:
| Server LSP | Estensioni | Requisiti |
| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| astro | .astro | Installazione automatica per progetti Astro |
| bash | .sh, .bash, .zsh, .ksh | Installazione automatica di bash-language-server |
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Installazione automatica per progetti C/C++ |
| csharp | .cs | `.NET SDK` installato |
| clojure-lsp | .clj, .cljs, .cljc, .edn | comando `clojure-lsp` disponibile |
| dart | .dart | comando `dart` disponibile |
| deno | .ts, .tsx, .js, .jsx, .mjs | comando `deno` disponibile (rileva automaticamente deno.json/deno.jsonc) |
| elixir-ls | .ex, .exs | comando `elixir` disponibile |
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | dipendenza `eslint` nel progetto |
| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` installato |
| gleam | .gleam | comando `gleam` disponibile |
| gopls | .go | comando `go` disponibile |
| hls | .hs, .lhs | comando `haskell-language-server-wrapper` disponibile |
| jdtls | .java | `Java SDK (version 21+)` installato |
| julials | .jl | `julia` e `LanguageServer.jl` installati |
| kotlin-ls | .kt, .kts | Installazione automatica per progetti Kotlin |
| lua-ls | .lua | Installazione automatica per progetti Lua |
| nixd | .nix | comando `nixd` disponibile |
| ocaml-lsp | .ml, .mli | comando `ocamllsp` disponibile |
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | dipendenza `oxlint` nel progetto |
| php intelephense | .php | Installazione automatica per progetti PHP |
| prisma | .prisma | comando `prisma` disponibile |
| pyright | .py, .pyi | dipendenza `pyright` installata |
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | comandi `ruby` e `gem` disponibili |
| rust | .rs | comando `rust-analyzer` disponibile |
| sourcekit-lsp | .swift, .objc, .objcpp | `swift` installato (`xcode` su macOS) |
| svelte | .svelte | Installazione automatica per progetti Svelte |
| terraform | .tf, .tfvars | Installazione automatica dalle release GitHub |
| tinymist | .typ, .typc | Installazione automatica dalle release GitHub |
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | dipendenza `typescript` nel progetto |
| vue | .vue | Installazione automatica per progetti Vue |
| yaml-ls | .yaml, .yml | Installazione automatica di Red Hat yaml-language-server |
| zls | .zig, .zon | comando `zig` disponibile |
LSP è disabilitato per impostazione predefinita. Quando è abilitato, i server si avviano quando viene rilevata una delle estensioni qui sopra e i requisiti sono soddisfatti.
:::note
Puoi disabilitare il download automatico dei server LSP impostando la variabile d'ambiente `OPENCODE_DISABLE_LSP_DOWNLOAD` a `true`.
:::
---
## Come funziona
Quando LSP è abilitato e opencode apre un file:
1. Controlla l'estensione del file rispetto a tutti i server LSP abilitati.
2. Avvia il server LSP appropriato se non e gia in esecuzione.
---
## Buone pratiche
LSP può aiutare l'agente a trovare e correggere problemi fornendo diagnostica dai server di linguaggio. Questo è utile in alcuni progetti, ma non è sempre un vantaggio netto.
I server di linguaggio possono andare fuori sincronizzazione, usare molta memoria, variare in base alla versione o al progetto e rallentare i workflow dell'agente. In molti progetti è meglio far eseguire direttamente all'agente lint, typecheck o altri strumenti CLI diagnostici, così gli errori rientrano nel ciclo dell'agente senza questi compromessi. Documenta questi comandi nei file di istruzioni come `AGENTS.md` o nelle skills, così l'agente sa cosa eseguire. Abilita LSP quando il tuo progetto trae beneficio da feedback aggiuntivo del server di linguaggio.
---
## Configura
Puoi abilitare e personalizzare i server LSP tramite la sezione `lsp` nella configurazione di opencode.
Per abilitare tutti i server LSP integrati, imposta `lsp` a `true`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"lsp": true
}
```
Usa un oggetto per mantenere abilitati i server integrati mentre configuri override o server personalizzati.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"lsp": {}
}
```
Ogni server LSP supporta i seguenti campi:
| Proprieta | Tipo | Descrizione |
| ---------------- | -------- | ------------------------------------------------ |
| `disabled` | boolean | Imposta a `true` per disabilitare il server LSP |
| `command` | string[] | Il comando per avviare il server LSP |
| `extensions` | string[] | Estensioni file gestite da questo server LSP |
| `env` | object | Variabili d'ambiente da impostare all'avvio |
| `initialization` | object | Opzioni di inizializzazione da inviare al server |
Vediamo alcuni esempi.
---
### Variabili d'ambiente
Usa la proprieta `env` per impostare variabili d'ambiente quando avvii il server LSP:
```json title="opencode.json" {5-7}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug"
}
}
}
}
```
---
### Opzioni di inizializzazione
Usa la proprieta `initialization` per passare opzioni di inizializzazione al server LSP. Sono impostazioni specifiche del server inviate durante la richiesta LSP `initialize`:
```json title="opencode.json" {5-9}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}
```
:::note
Le opzioni di inizializzazione variano da server a server. Consulta la documentazione del tuo server LSP per le opzioni disponibili.
:::
---
### Disabilitare i server LSP
Se `lsp` è omesso, tutti i server LSP sono disabilitati. Per disabilitare tutti i server LSP dopo che un'altra configurazione li ha abilitati, imposta `lsp` a `false`:
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}
```
Per disabilitare un server LSP **specifico**, imposta `disabled` a `true`:
```json title="opencode.json" {5}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}
```
---
### Server LSP personalizzati
Puoi aggiungere server LSP personalizzati specificando il comando e le estensioni file:
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}
```
---
## Informazioni aggiuntive
### PHP Intelephense
PHP Intelephense offre funzionalita premium tramite una chiave di licenza. Puoi fornire la chiave inserendo (solo) la chiave in un file di testo in:
- Su macOS/Linux: `$HOME/intelephense/license.txt`
- Su Windows: `%USERPROFILE%/intelephense/license.txt`
Il file deve contenere solo la chiave di licenza, senza contenuti aggiuntivi.
|