File size: 10,170 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: LSP-servere
description: OpenCode integreres med dine LSP-servere.
---

OpenCode kan integreres med Language Server Protocol (LSP)-servere for at bruge diagnostik som feedback til agenten.

---

## Indbyggede

OpenCode leveres med flere indbyggede LSP-servere til populære sprog:

| LSP Server         | Udvidelser                                                | Krav                                                            |
| ------------------ | --------------------------------------------------------- | --------------------------------------------------------------- |
| astro              | .astro                                                    | Autoinstallationer til Astro-projekter                          |
| bash               | .sh,.bash,.zsh,.ksh                                       | Autoinstallerer bash-language-server                            |
| clangd             | .c,.cpp,.cc,.cxx,.c++,.h,.hpp,.hh,.hxx,.h++               | Autoinstallationer for C/C++ projekter                          |
| csharp             | .cs                                                       | `.NET SDK` installere                                           |
| clojure-lsp        | .clj,.cljs,.cljc,.edn                                     | `clojure-lsp` kommando tilgængelig                              |
| dart               | .dart                                                     | `dart` kommando tilgængelig                                     |
| deno               | .ts,.tsx,.js,.jsx,.mjs                                    | `deno` kommando tilgængelig (auto-detects deno.json/deno.jsonc) |
| elixir-ls          | .ex,.exs                                                  | `elixir` kommando tilgængelig                                   |
| eslint             | .ts,.tsx,.js,.jsx,.mjs,.cjs,.mts,.cts,.vue                | `eslint` afhængighed i projekt                                  |
| fsharp             | .fs,.fsi,.fsx,.fsscript                                   | `.NET SDK` installere                                           |
| gleam              | .gleam                                                    | `gleam` kommando tilgængelig                                    |
| gopls              | .go                                                       | `go` kommando tilgængelig                                       |
| hls                | .hs,.lhs                                                  | `haskell-language-server-wrapper` kommando tilgængelig          |
| jdtls              | .java                                                     | `Java SDK (version 21+)` installere                             |
| julials            | .jl                                                       | `julia` og `LanguageServer.jl` installeret                      |
| kotlin-ls          | .kt,.kts                                                  | Autoinstallationer til Kotlin-projekter                         |
| lua-ls             | .lua                                                      | Autoinstallationer til Lua-projekter                            |
| nixd               | .nix                                                      | `nixd` kommando tilgængelig                                     |
| ocaml-lsp          | .ml,.mli                                                  | `ocamllsp` kommando tilgængelig                                 |
| oxlint             | .ts,.tsx,.js,.jsx,.mjs,.cjs,.mts,.cts,.vue,.astro,.svelte | `oxlint` afhængighed i projekt                                  |
| php intelephense   | .php                                                      | Automatiske installationer til PHP-projekter                    |
| prisma             | .prisma                                                   | `prisma` kommando tilgængelig                                   |
| pyright            | .py,.pyi                                                  | `pyright` afhængig installeret                                  |
| ruby-lsp (rubocop) | .rb,.rake,.gemspec,.ru                                    | `ruby` og `gem` kommandoer tilgængelige                         |
| rust               | .rs                                                       | `rust-analyzer` kommando tilgængelig                            |
| sourcekit-lsp      | .swift,.objc,.objcpp                                      | `swift` installere (`xcode` på macOS)                           |
| svelte             | .svelte                                                   | Autoinstallationer til Svelte-projekter                         |
| terraform          | .tf,.tfvars                                               | Automatiske installationer fra GitHub-udgivelser                |
| tinymist           | .typ,.typc                                                | Automatiske installationer fra GitHub-udgivelser                |
| typescript         | .ts,.tsx,.js,.jsx,.mjs,.cjs,.mts,.cts                     | `typescript` afhængighed i projekt                              |
| vue                | .vue                                                      | Autoinstallationer til Vue-projekter                            |
| yaml-ls            | .yaml,.yml                                                | Autoinstallerer Red Hat yaml-language-server                    |
| zls                | .zig,.zon                                                 | `zig` kommando tilgængelig                                      |

LSP er deaktiveret som standard. Når det er aktiveret, starter servere, når en af ovenstående filtypenavne opdages, og kravene er opfyldt.

:::note
Du kan deaktivere automatisk LSP-serverdownloads ved at indstille miljøvariablen `OPENCODE_DISABLE_LSP_DOWNLOAD` til `true`.
:::

---

## Sådan fungerer det

Når LSP er aktiveret, og opencode åbner en fil, vil den:

1. Kontrollerer filtypenavnet mod alle aktiverede LSP-servere.
2. Starter den relevante LSP-server, hvis den ikke allerede kører.

---

## Bedste praksis

LSP kan hjælpe agenten med at finde og rette problemer ved at levere diagnostik fra sprogservere. Det er nyttigt i nogle projekter, men er ikke altid en klar fordel.

Sprogservere kan komme ud af sync, bruge meget hukommelse, variere efter version eller projekt og gøre agentarbejdsgange langsommere. I mange projekter er det bedre, at agenten kører lint, typecheck eller andre diagnostiske CLI-værktøjer direkte, så fejl føres tilbage i agentens loop uden disse afvejninger. Dokumentér disse kommandoer i instruktionsfiler som `AGENTS.md` eller skills, så agenten ved, hvad den skal køre. Aktivér LSP, når dit projekt har gavn af ekstra sprogserverfeedback.

---

## Konfiguration

Du kan aktivere og tilpasse LSP-servere gennem sektionen `lsp` i din opencode-konfiguration.

For at aktivere alle indbyggede LSP-servere skal du indstille `lsp` til `true`.

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

Brug et objekt til at holde indbyggede servere aktiveret, mens du konfigurerer tilsidesættelser eller brugerdefinerede servere.

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

Hver LSP- server understøtter følgende:

| Egenskab         | Type     | Beskrivelse                                               |
| ---------------- | -------- | --------------------------------------------------------- |
| `disabled`       | boolean  | Indstil dette til `true` for at deaktivere LSP-serveren   |
| `command`        | string[] | Kommandoen til at starte LSP-serveren                     |
| `extensions`     | string[] | Filtypenavne, som denne LSP-server skal håndtere          |
| `env`            | object   | Miljøvariabler, der skal indstilles, når serveren starter |
| `initialization` | object   | Initialiseringsmuligheder for at sende til LSP-serveren   |

Lad os se på nogle eksempler.

---

### Miljøvariabler

Brug egenskaben `env` til at indstille miljøvariabler, når du starter LSP-serveren:

```json title="opencode.json" {5-7}
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "rust": {
      "env": {
        "RUST_LOG": "debug"
      }
    }
  }
}
```

---

### Initialiseringsmuligheder

Brug egenskaben `initialization` til at videregive initialiseringsindstillinger til LSP-serveren. Disse er serverspecifikke indstillinger sendt under LSP `initialize` anmodningen:

```json title="opencode.json" {5-9}
{
  "$schema": "https://opencode.ai/config.json",
  "lsp": {
    "typescript": {
      "initialization": {
        "preferences": {
          "importModuleSpecifierPreference": "relative"
        }
      }
    }
  }
}
```

:::note
Initialiseringsmuligheder forskellige afhængige af LSP-serveren. Se din LSP-servers dokumentation for tilgængelige muligheder.
:::

---

### Deaktivering af LSP-servere

Hvis `lsp` udelades, er alle LSP-servere deaktiveret. For at deaktivere alle LSP-servere efter at en anden konfiguration har aktiveret dem, skal du indstille `lsp` til `false`:

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

For at deaktivere en **specifik** LSP-server skal du indstille `disabled` til `true`:

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

---

### Brugerdefinerede LSP-servere

Du kan tilføje brugerdefinerede LSP-servere ved at angive kommandoen og filtypenavne:

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

---

## Yderligere oplysninger

### PHP Intelephense

PHP Intelephense tilbyder premium funktioner gennem en licensnøgle. Du kan angive en licensnøgle ved at placere (kun) nøglen i en tekstfil på:

- På macOS/Linux: `$HOME/intelephense/license.txt`
- På Windows: `%USERPROFILE%/intelephense/license.txt`

Filen bør kun indeholde licensnøglen uden yderligere indhold.