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.