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.
É 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.
Como funciona
/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")
- Detecção de linguagem — pela extensão do arquivo.
- 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.
- Handshake —
initialize + textDocument/didOpen.
- 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 |
# 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
> /lsp ./cli/agent_mode.go
Iniciando language server: gopls...
Diagnostics for agent_mode.go
─────────────────────────────────────────
Nenhum problema encontrado.
> /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
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.
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