Servidores LSP
O OpenCode se integra aos seus servidores LSP.
O OpenCode pode se integrar ao seu Language Server Protocol (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 o bash-language-server |
| clangd | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hh, .hxx, .h++ | Instala automaticamente para projetos C/C++ |
| csharp | .cs, .csx | .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 |
| razor | .razor, .cshtml | .NET SDK e a extensão C# do VS Code instalados |
| 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 releases do GitHub |
| tinymist | .typ, .typc | Instala automaticamente a partir de releases 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 yaml-language-server da Red Hat |
| zls | .zig, .zon | Comando zig disponível |
Quando o LSP está habilitado, os servidores iniciam quando uma das extensões de arquivo acima é detectada e os requisitos são atendidos.
Nota: Você pode desabilitar os downloads automáticos de servidores LSP definindo a variável de ambiente
OPENCODE_DISABLE_LSP_DOWNLOADcomotrue.
Como Funciona
Quando o LSP está habilitado e o opencode abre um arquivo, ele:
- Verifica a extensão do arquivo contra todos os servidores LSP habilitados.
- Inicia o servidor LSP apropriado se ainda não estiver em execução.
Configurar
Você pode habilitar e personalizar servidores LSP através da seção lsp na sua config do opencode.
Para habilitar todos os servidores LSP integrados, defina lsp como true.
{
"$schema": "https://opencode.ai/config.json",
"lsp": true
}Use um objeto para manter os integrados habilitados enquanto configura substituições ou servidores personalizados.
{
"$schema": "https://opencode.ai/config.json",
"lsp": {}
}Cada entrada de servidor LSP configurada oferece suporte ao seguinte:
As entradas de servidor precisam de command, a menos que apenas desabilitem um servidor.
| 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 tratar |
env | object | Variáveis de ambiente a definir ao iniciar o servidor |
initialization | object | Opções de inicialização a enviar 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:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"rust": {
"command": ["rust-analyzer"],
"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 requisição initialize do LSP:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"],
"initialization": {
"preferences": {
"importModuleSpecifierPreference": "relative"
}
}
}
}
}Nota: As opções de inicialização variam conforme o servidor LSP. Verifique a documentação do seu servidor LSP para as 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 config os habilitou, defina lsp como false:
{
"$schema": "https://opencode.ai/config.json",
"lsp": false
}Para desabilitar um servidor LSP específico, defina disabled como true:
{
"$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:
{
"$schema": "https://opencode.ai/config.json",
"lsp": {
"custom-lsp": {
"command": ["custom-lsp-server", "--stdio"],
"extensions": [".custom"]
}
}
}Informações Adicionais
PHP Intelephense
O 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 nenhum conteúdo adicional.