summaryrefslogtreecommitdiffhomepage
path: root/packages/web/src/content/docs/nb/lsp.mdx
blob: 3847106529933040a90476a819cac4be080fceeb (plain)
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
---
title: LSP Servere
description: opencode integreres med LSP-serverne dine.
---

OpenCode integreres med din Language Server Protocol (LSP) for å hjelpe LLM med å samhandle med kodebasen din. Den bruker diagnostikk for å gi tilbakemelding til LLM.

---

## Innebygd

OpenCode kommer med flere innebygde LSP-servere for populære språk:

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

LSP-servere aktiveres automatisk når en av filtypene ovenfor oppdages og kravene oppfylles.

:::note
Du kan deaktivere automatiske LSP-servernedlastinger ved å sette miljøvariabelen `OPENCODE_DISABLE_LSP_DOWNLOAD` til `true`.
:::

---

## Hvordan det fungerer

Når opencode åpner en fil, gjør den:

1. Kontrollerer filtypen mot alle aktiverte LSP-servere.
2. Starter den riktige LSP-serveren hvis den ikke allerede kjører.

---

## Konfigurer

Du kan tilpasse LSP-servere gjennom `lsp`-delen i OpenCode-konfigurasjonen.

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

Hver LSP-server støtter følgende:

| Property         | Type     | Beskrivelse                                              |
| ---------------- | -------- | -------------------------------------------------------- |
| `disabled`       | boolean  | Sett dette til `true` for å deaktivere LSP-serveren      |
| `command`        | string[] | Kommandoen for å starte LSP-serveren                     |
| `extensions`     | string[] | Filutvidelser denne LSP-serveren skal håndtere           |
| `env`            | object   | Miljøvariabler som skal angis når serveren startes       |
| `initialization` | object   | Initialiseringsalternativer for å sende til LSP-serveren |

La oss se på noen eksempler.

---

### Miljøvariabler

Bruk egenskapen `env` til å angi 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"
      }
    }
  }
}
```

---

### Initialiseringsalternativer

Bruk egenskapen `initialization` til å sende initialiseringsalternativer til LSP-serveren. Dette er serverspesifikke innstillinger sendt under LSP `initialize`-forespørselen:

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

:::note
Initialiseringsalternativer varierer etter LSP-server. Sjekk dokumentasjonen til LSP-serveren for tilgjengelige alternativer.
:::

---

### Deaktiverer LSP-servere

For å deaktivere **alle** LSP servere globalt, sett `lsp` til `false`:

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

For å deaktivere en **spesifikk** LSP-server, sett `disabled` til `true`:

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

---

### Egendefinerte LSP-servere

Du kan legge til egendefinerte LSP-servere ved å spesifisere kommandoen og filtypene:

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

---

## Tilleggsinformasjon

### PHP Intelephense

PHP Intelephense tilbyr førsteklasses funksjoner gjennom en lisensnøkkel. Du kan oppgi en lisensnøkkel ved å plassere (bare) nøkkelen i en tekstfil på:

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

Filen skal bare inneholde lisensnøkkelen uten ekstra innhold.