Português
Documentação
Servidores LSP

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 LSPExtensõesRequisitos
astro.astroInstala automaticamente para projetos Astro
bash.sh, .bash, .zsh, .kshInstala 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, .ednComando clojure-lsp disponível
dart.dartComando dart disponível
deno.ts, .tsx, .js, .jsx, .mjsComando deno disponível (detecta automaticamente deno.json/deno.jsonc)
elixir-ls.ex, .exsComando elixir disponível
eslint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vueDependência eslint no projeto
fsharp.fs, .fsi, .fsx, .fsscript.NET SDK instalado
gleam.gleamComando gleam disponível
gopls.goComando go disponível
hls.hs, .lhsComando haskell-language-server-wrapper disponível
jdtls.javaJava SDK (version 21+) instalado
julials.jljulia e LanguageServer.jl instalados
kotlin-ls.kt, .ktsInstala automaticamente para projetos Kotlin
lua-ls.luaInstala automaticamente para projetos Lua
nixd.nixComando nixd disponível
ocaml-lsp.ml, .mliComando ocamllsp disponível
oxlint.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .cts, .vue, .astro, .svelteDependência oxlint no projeto
php intelephense.phpInstala automaticamente para projetos PHP
prisma.prismaComando prisma disponível
pyright.py, .pyiDependência pyright instalada
razor.razor, .cshtml.NET SDK e a extensão C# do VS Code instalados
ruby-lsp (rubocop).rb, .rake, .gemspec, .ruComandos ruby e gem disponíveis
rust.rsComando rust-analyzer disponível
sourcekit-lsp.swift, .objc, .objcppswift instalado (xcode no macOS)
svelte.svelteInstala automaticamente para projetos Svelte
terraform.tf, .tfvarsInstala automaticamente a partir de releases do GitHub
tinymist.typ, .typcInstala automaticamente a partir de releases do GitHub
typescript.ts, .tsx, .js, .jsx, .mjs, .cjs, .mts, .ctsDependência typescript no projeto
vue.vueInstala automaticamente para projetos Vue
yaml-ls.yaml, .ymlInstala automaticamente o yaml-language-server da Red Hat
zls.zig, .zonComando 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_DOWNLOAD como true.


Como Funciona

Quando o LSP está habilitado e o opencode abre um arquivo, ele:

  1. Verifica a extensão do arquivo contra todos os servidores LSP habilitados.
  2. 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.

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

Use um objeto para manter os integrados habilitados enquanto configura substituições ou servidores personalizados.

opencode.json
{
  "$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.

PropriedadeTipoDescrição
disabledbooleanDefina como true para desabilitar o servidor LSP
commandstring[]O comando para iniciar o servidor LSP
extensionsstring[]Extensões de arquivo que este servidor LSP deve tratar
envobjectVariáveis de ambiente a definir ao iniciar o servidor
initializationobjectOpçõ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:

opencode.json
{
  "$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:

opencode.json
{
  "$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:

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

Para desabilitar um servidor LSP específico, defina disabled como true:

opencode.json
{
  "$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:

opencode.json
{
  "$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.