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
|
---
title: Servidores LSP
description: O opencode integra-se aos seus servidores LSP.
---
O opencode integra-se ao seu Protocolo de Servidor de Linguagem (LSP) para ajudar o LLM a interagir com sua base de código. Ele usa diagnósticos para fornecer feedback ao LLM.
---
## Integrados
O opencode vem com vários servidores LSP integrados para linguagens populares:
| Servidor LSP | Extensões | Requisitos |
| ------------------ | ------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| astro | .astro | Instala automaticamente para projetos Astro |
| bash | .sh, .bash, .zsh, .ksh | Instala automaticamente bash-language-server |
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Instala automaticamente para projetos C/C++ |
| csharp | .cs | `.NET SDK` instalado |
| clojure-lsp | .clj, .cljs, .cljc, .edn | Comando `clojure-lsp` disponível |
| dart | .dart | Comando `dart` disponível |
| deno | .ts, .tsx, .js, .jsx, .mjs | Comando `deno` disponível (detecta automaticamente deno.json/deno.jsonc) |
| elixir-ls | .ex, .exs | Comando `elixir` disponível |
| eslint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue | Dependência `eslint` no projeto |
| fsharp | .fs, .fsi, .fsx, .fsscript | `.NET SDK` instalado |
| gleam | .gleam | Comando `gleam` disponível |
| gopls | .go | Comando `go` disponível |
| hls | .hs, .lhs | Comando `haskell-language-server-wrapper` disponível |
| jdtls | .java | `Java SDK (version 21+)` instalado |
| julials | .jl | `julia` e `LanguageServer.jl` instalados |
| kotlin-ls | .kt, .kts | Instala automaticamente para projetos Kotlin |
| lua-ls | .lua | Instala automaticamente para projetos Lua |
| nixd | .nix | Comando `nixd` disponível |
| ocaml-lsp | .ml, .mli | Comando `ocamllsp` disponível |
| oxlint | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelte | Dependência `oxlint` no projeto |
| php intelephense | .php | Instala automaticamente para projetos PHP |
| prisma | .prisma | Comando `prisma` disponível |
| pyright | .py, .pyi | Dependência `pyright` instalada |
| ruby-lsp (rubocop) | .rb, .rake, .gemspec, .ru | Comandos `ruby` e `gem` disponíveis |
| rust | .rs | Comando `rust-analyzer` disponível |
| sourcekit-lsp | .swift, .objc, .objcpp | `swift` instalado (`xcode` no macOS) |
| svelte | .svelte | Instala automaticamente para projetos Svelte |
| terraform | .tf, .tfvars | Instala automaticamente a partir de lançamentos do GitHub |
| tinymist | .typ, .typc | Instala automaticamente a partir de lançamentos do GitHub |
| typescript | .ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts | Dependência `typescript` no projeto |
| vue | .vue | Instala automaticamente para projetos Vue |
| yaml-ls | .yaml, .yml | Instala automaticamente o servidor yaml-language-server da Red Hat |
| zls | .zig, .zon | Comando `zig` disponível |
Os servidores LSP são habilitados automaticamente quando uma das extensões de arquivo acima é detectada e os requisitos são atendidos.
:::note
Você pode desabilitar os downloads automáticos do servidor LSP definindo a variável de ambiente `OPENCODE_DISABLE_LSP_DOWNLOAD` como `true`.
:::
---
## Como Funciona
Quando o opencode abre um arquivo, ele:
1. Verifica a extensão do arquivo em relação a todos os servidores LSP habilitados.
2. Inicia o servidor LSP apropriado se não estiver em execução.
---
## Configuração
Você pode personalizar os servidores LSP através da seção `lsp` na sua configuração do opencode.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"lsp": {}
}
```
Cada servidor LSP suporta o seguinte:
| Propriedade | Tipo | Descrição |
| ---------------- | -------- | ------------------------------------------------------------- |
| `disabled` | boolean | Defina como `true` para desabilitar o servidor LSP |
| `command` | string[] | O comando para iniciar o servidor LSP |
| `extensions` | string[] | Extensões de arquivo que este servidor LSP deve manipular |
| `env` | object | Variáveis de ambiente a serem definidas ao iniciar o servidor |
| `initialization` | object | Opções de inicialização a serem enviadas ao servidor LSP |
Vamos ver alguns exemplos.
---
### Variáveis de ambiente
Use a propriedade `env` para definir variáveis de ambiente ao iniciar o servidor LSP:
```json title="opencode.json" {5-7}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"env": {
"RUST_LOG": "debug"
}
}
}
}
```
---
### Opções de inicialização
Use a propriedade `initialization` para passar opções de inicialização ao servidor LSP. Estas são configurações específicas do servidor enviadas durante a solicitação `initialize` do LSP:
```json title="opencode.json" {5-9}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}
```
:::note
As opções de inicialização variam de acordo com o servidor LSP. Verifique a documentação do seu servidor LSP para opções disponíveis.
:::
---
### Desabilitando servidores LSP
Para desabilitar **todos** os servidores LSP globalmente, defina `lsp` como `false`:
```json title="opencode.json" {3}
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}
```
Para desabilitar um servidor LSP **específico**, defina `disabled` como `true`:
```json title="opencode.json" {5}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"typescript": {
"disabled": true
}
}
}
```
---
### Servidores LSP personalizados
Você pode adicionar servidores LSP personalizados especificando o comando e as extensões de arquivo:
```json title="opencode.json" {4-7}
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}
```
---
## Informações Adicionais
### PHP Intelephense
PHP Intelephense oferece recursos premium através de uma chave de licença. Você pode fornecer uma chave de licença colocando (apenas) a chave em um arquivo de texto em:
- No macOS/Linux: `$HOME/intelephense/license.txt`
- No Windows: `%USERPROFILE%/intelephense/license.txt`
O arquivo deve conter apenas a chave de licença sem conteúdo adicional.
|