File size: 11,146 Bytes
3e05655 | 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: Servidores LSP
description: O opencode integra-se aos seus servidores LSP.
---
O opencode pode se integrar a servidores Language Server Protocol (LSP) para usar diagnósticos como feedback para o agente.
---
## 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 |
O LSP fica desabilitado por padrão. Quando habilitado, os servidores iniciam 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 LSP está habilitado e 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.
---
## Boas práticas
O LSP pode ajudar o agente a encontrar e corrigir problemas fornecendo diagnósticos dos servidores de linguagem. Isso é útil em alguns projetos, mas nem sempre é um ganho líquido.
Servidores de linguagem podem ficar fora de sincronia, usar bastante memória, variar por versão ou projeto e desacelerar fluxos de trabalho do agente. Em muitos projetos, é melhor fazer o agente executar lint, typecheck ou outras ferramentas CLI de diagnóstico diretamente, para que os erros voltem ao ciclo do agente sem essas compensações. Documente esses comandos em arquivos de instruções como `AGENTS.md` ou skills, para que o agente saiba o que executar. Habilite o LSP quando seu projeto se beneficiar de feedback adicional do servidor de linguagem.
---
## Configuração
Você pode habilitar e personalizar os servidores LSP através da seção `lsp` na sua configuração do opencode.
Para habilitar todos os servidores LSP integrados, defina `lsp` como `true`.
```json title="opencode.json"
{
"$schema": "https://opencode.ai/config.json",
"lsp": true
}
```
Use um objeto para manter os servidores integrados habilitados enquanto configura substituições ou servidores personalizados.
```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
Se `lsp` for omitido, todos os servidores LSP ficam desabilitados. Para desabilitar todos os servidores LSP depois que outra configuração os habilitou, 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.
|