> ## Documentation Index
> Fetch the complete documentation index at: https://chatcli.edilsonfreitas.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Diagnósticos LSP

> Roda um language server sobre um arquivo e mostra os erros/avisos do compilador via /lsp — sem SDKs, falando JSON-RPC com framing Content-Length.

O comando **`/lsp <arquivo>`** pega os diagnósticos reais de um arquivo de código — os mesmos erros e avisos que seu editor mostraria — iniciando o **language server** apropriado e falando o **Language Server Protocol** com ele.

<Info>
  É um comando **manual e por arquivo**: você passa um arquivo, o ChatCLI inicia o language server da linguagem dele, abre o documento, aguarda os diagnósticos e os imprime. Não há injeção automática no `/agent`/`/coder`.
</Info>

***

## Como funciona

```text theme={"system"}
/lsp ./cli/agent_mode.go
     │
     ▼
detecta a linguagem pela extensão (.go → gopls)
     │
     ▼
inicia o language server (stdio, JSON-RPC com framing Content-Length)
     │
     ▼
initialize → didOpen(arquivo) → aguarda publishDiagnostics (até 12s)
     │
     ▼
imprime erros/avisos (ou "Nenhum problema encontrado")
```

1. **Detecção de linguagem** — pela extensão do arquivo.
2. **Spawn** — inicia o language server da linguagem (comando default ou seu override). Se o binário não estiver instalado/no `PATH`, o `/lsp` avisa.
3. **Handshake** — `initialize` + `textDocument/didOpen`.
4. **Diagnósticos** — espera até **12s** por `textDocument/publishDiagnostics` e renderiza o resultado.

***

## Linguagens e comandos default

Cada linguagem usa um comando convencional de stdio, sobrescrevível por variável de ambiente. O binário precisa estar instalado e no `PATH`.

| Extensões                 | Language server (default)            | Override                 |
| ------------------------- | ------------------------------------ | ------------------------ |
| `.go`                     | `gopls`                              | `CHATCLI_LSP_GO_CMD`     |
| `.py`                     | `pyright-langserver --stdio`         | `CHATCLI_LSP_PYTHON_CMD` |
| `.ts` `.tsx` `.js` `.jsx` | `typescript-language-server --stdio` | `CHATCLI_LSP_TS_CMD`     |
| `.rs`                     | `rust-analyzer`                      | `CHATCLI_LSP_RUST_CMD`   |
| `.c` `.h`                 | `clangd`                             | `CHATCLI_LSP_C_CMD`      |
| `.cpp` `.cc`              | `clangd`                             | `CHATCLI_LSP_CPP_CMD`    |
| `.java`                   | `jdtls`                              | `CHATCLI_LSP_JAVA_CMD`   |
| `.rb`                     | `solargraph stdio`                   | `CHATCLI_LSP_RUBY_CMD`   |

```bash theme={"system"}
# Exemplo: ligar trace do gopls ou apontar para outro binário
export CHATCLI_LSP_GO_CMD="gopls -rpc.trace"
export CHATCLI_LSP_PYTHON_CMD="pyright-langserver --stdio"
```

***

## Uso

```text theme={"system"}
> /lsp ./cli/agent_mode.go
  Iniciando language server: gopls...

  Diagnostics for agent_mode.go
  ─────────────────────────────────────────
  Nenhum problema encontrado.
```

```text theme={"system"}
> /lsp ./broken.go
  Iniciando language server: gopls...

  Diagnostics for broken.go
  ─────────────────────────────────────────
  error  12:6   undefined: fmt.Printline
  warn   30:2   declared and not used: x
```

<Tip>
  Combine com o `/coder`: rode `/lsp` num arquivo que você acabou de editar para confirmar que não introduziu erros de compilação antes de seguir.
</Tip>

***

## A tool @lsp — navegação semântica para o agente

O mesmo motor LSP também está disponível para o **modelo** nos modos agent e coder, como a tool builtin **`@lsp`** — com um **pool de servidores por sessão** (o server inicializa uma vez por projeto e é reaproveitado entre chamadas; servidores ociosos são encerrados após 5 minutos):

| Subcomando                                | O que faz                                   |
| ----------------------------------------- | ------------------------------------------- |
| `diagnostics {file}`                      | erros/avisos do compilador sem rodar build  |
| `definition {file, line, column}`         | onde o símbolo está definido                |
| `references {file, line, column, limit?}` | todos os usos do símbolo no projeto         |
| `symbols {file}`                          | outline do arquivo: funções, tipos, métodos |
| `hover {file, line, column}`              | assinatura/tipo/docs do símbolo             |

Posições são 1-based nos dois sentidos. Onde o `@search` encontra texto, o `@lsp` entende código: depois de editar um arquivo, `diagnostics` confirma que ele ainda compila; antes de mudar um símbolo, `references` mostra o raio de impacto.

## Veja também

* [Modo Coder](/pt/core-concepts/coder-mode)
* [Variáveis de Ambiente → LSP](/pt/reference/environment-variables#lsp-language-server-protocol-diagnosticos)
