File size: 10,333 Bytes
89a2873
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
title: LSP serveri
description: OpenCode se integriše sa vašim LSP serverima.
---

OpenCode se može integrisati sa Language Server Protocol (LSP) serverima kako bi koristio dijagnostiku kao feedback za agenta.

## Ugrađeni

OpenCode dolazi sa nekoliko ugrađenih LSP servera za popularne jezike:

| LSP server         | Ekstenzije                                                          | Zahtjevi                                                 |
| ------------------ | ------------------------------------------------------------------- | -------------------------------------------------------- |
| astro              | .astro                                                              | Automatske instalacije za Astro projekte                 |
| bash               | .sh, .bash, .zsh, .ksh                                              | Automatski instalira bash-language-server                |
| clangd             | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++                | Automatske instalacije za C/C++ projekte                 |
| csharp             | .cs                                                                 | `.NET SDK` instaliran                                    |
| clojure-lsp        | .clj, .cljs, .cljc, .edn                                            | `clojure-lsp` komanda dostupna                           |
| dart               | .dart                                                               | `dart` komanda dostupna                                  |
| deno               | .ts, .tsx, .js, .jsx, .mjs                                          | `deno` komanda dostupna (automatski detektuje deno.json) |
| elixir-ls          | .ex, .exs                                                           | `elixir` komanda dostupna                                |
| eslint             | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue                  | `eslint` ovisnost u projektu                             |
| fsharp             | .fs, .fsi, .fsx, .fsscript                                          | `.NET SDK` instaliran                                    |
| gleam              | .gleam                                                              | `gleam` komanda dostupna                                 |
| gopls              | .go                                                                 | `go` komanda dostupna                                    |
| hls                | .hs, .lhs                                                           | `haskell-language-server-wrapper` komanda dostupna       |
| jdtls              | .java                                                               | `Java SDK (version 21+)` instaliran                      |
| julials            | .jl                                                                 | `julia` i `LanguageServer.jl` instalirani                |
| kotlin-ls          | .kt, .kts                                                           | Automatske instalacije za Kotlin projekte                |
| lua-ls             | .lua                                                                | Automatske instalacije za Lua projekte                   |
| nixd               | .nix                                                                | `nixd` komanda dostupna                                  |
| ocaml-lsp          | .ml, .mli                                                           | `ocamllsp` komanda dostupna                              |
| oxlint             | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | `oxlint` zavisnost u projektu                            |
| php intelephense   | .php                                                                | Automatske instalacije za PHP projekte                   |
| prisma             | .prisma                                                             | `prisma` komanda dostupna                                |
| pyright            | .py, .pyi                                                           | `pyright` ovisnost instalirana                           |
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru                                           | `ruby` i `gem` komande dostupne                          |
| rust               | .rs                                                                 | `rust-analyzer` komanda dostupna                         |
| sourcekit-lsp      | .swift, .objc, .objcpp                                              | `swift` instaliran (`xcode` na macOS-u)                  |
| svelte             | .svelte                                                             | Automatske instalacije za Svelte projekte                |
| terraform          | .tf, .tfvars                                                        | Automatske instalacije iz GitHub izdanja                 |
| tinymist           | .typ, .typc                                                         | Automatske instalacije iz GitHub izdanja                 |
| typescript         | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts                        | `typescript` zavisnost u projektu                        |
| vue                | .vue                                                                | Automatske instalacije za Vue projekte                   |
| yaml-ls            | .yaml, .yml                                                         | Automatski instalira Red Hat yaml-language-server        |
| zls                | .zig, .zon                                                          | `zig` komanda dostupna                                   |

LSP je podrazumijevano isključen. Kada je omogućen, serveri se pokreću kada se otkrije jedna od gore navedenih ekstenzija datoteke i zahtjevi su ispunjeni.
:::note
Možete onemogućiti automatska preuzimanja LSP servera tako što ćete postaviti varijablu okruženja `OPENCODE_DISABLE_LSP_DOWNLOAD` na `true`.
:::

---

## Kako radi

Kada je LSP omogućen i opencode otvori fajl, on:

1. Provjerava ekstenziju datoteke u odnosu na sve omogućene LSP servere.
2. Pokreće odgovarajući LSP server ako već nije pokrenut.

---

## Najbolje prakse

LSP može pomoći agentu da pronađe i popravi probleme pružanjem dijagnostike iz jezičkih servera. Ovo je korisno u nekim projektima, ali nije uvijek neto pozitivno.

Jezički serveri mogu ispasti iz sinhronizacije, koristiti mnogo memorije, razlikovati se po verziji ili projektu i usporiti agent workflow. U mnogim projektima je bolje da agent direktno pokreće lint, typecheck ili druge dijagnostičke CLI alate, tako da se greške vraćaju u agent loop bez tih kompromisa. Dokumentujte te komande u instrukcijskim fajlovima kao što su `AGENTS.md` ili skills, kako bi agent znao šta treba pokrenuti. Uključite LSP kada vaš projekt ima koristi od dodatnog feedbacka jezičkog servera.

---

## Konfiguracija

Možete omogućiti i prilagoditi LSP servere kroz `lsp` odjeljak u vašoj opencode konfiguraciji.

Da biste omogućili sve ugrađene LSP servere, postavite `lsp` na `true`.

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

Koristite objekt da zadržite ugrađene servere omogućene dok konfigurirate izmjene ili prilagođene servere.

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

Svaki LSP server podržava sljedeće:

| Svojstvo         | Vrsta    | Opis                                                                 |
| ---------------- | -------- | -------------------------------------------------------------------- |
| `disabled`       | boolean  | Postavite ovo na `true` da onemogućite LSP server                    |
| `command`        | string[] | Naredba za pokretanje LSP servera                                    |
| `extensions`     | string[] | Ekstenzije datoteka koje ovaj LSP server treba da rukuje             |
| `env`            | objekt   | Varijable okruženja koje treba postaviti prilikom pokretanja servera |
| `initialization` | objekt   | Opcije inicijalizacije za slanje na LSP server                       |

Pogledajmo neke primjere.

---

### Varijable okruženja

Koristite svojstvo `env` za postavljanje varijabli okruženja prilikom pokretanja LSP servera:

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

---

### Opcije inicijalizacije

Koristite svojstvo `initialization` da prosledite opcije inicijalizacije na LSP server. Ovo su postavke specifične za server poslane tokom LSP `initialize` zahtjeva:

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

:::note
Opcije inicijalizacije razlikuju se od LSP servera. Provjerite dokumentaciju vašeg LSP servera za dostupne opcije.
:::

---

### Onemogućavanje LSP servera

Ako je `lsp` izostavljen, svi LSP serveri su onemogućeni. Da biste onemogućili sve LSP servere nakon što ih je druga konfiguracija omogućila, postavite `lsp` na `false`:

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

Da onemogućite **specifičan** LSP server, postavite `disabled` na `true`:

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

---

### Prilagođeni LSP serveri

Možete dodati prilagođene LSP servere navodeći ekstenzije naredbe i datoteke:

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

---

## Dodatne informacije

### PHP Intelephense

PHP Intelephense nudi vrhunske funkcije putem licencnog ključa. Možete dati licencni ključ postavljanjem (samo) ključa u tekstualnu datoteku na:

- Na macOS/Linuxu: `$HOME/intelephense/license.txt`
- Na Windowsima: `%USERPROFILE%/intelephense/license.txt`
  Datoteka treba da sadrži samo licencni ključ bez dodatnog sadržaja.