ADRIANOLAUREANO← Artigos
SÉRIE OFICINA · 03/03LSPREFATORAÇÃO

Como uma IDE entende um projeto inteiro e refatora código com segurança?

Encontrar uma função no arquivo é local. Renomeá-la em dezenas de arquivos exige conhecer referências, versões e conflitos — e mudar tudo ou não mudar nada.

ARTIGO 32 · OFICINA 1.0 · PROJETO E PROTOCOLOS

8métodos LSP

3camadas separadas

1rename transacional

OFICINA · DA TECLA À FERRAMENTA INTELIGENTE
main.pulsofunção soma(a, b) {
··retorne a + b
}
mostre(so▌)
OFICINA 1.0editar · entender · agir
FERRAMENTAS

Crivo: sem erros

soma(a, b)

Vigia disponível

VOCABULÁRIO VISUAL

As peças desta etapa da Oficina.

01Workspaceraiz confiável do projeto
02Índicemapa de definições e referências
03WorkspaceEditmudanças coordenadas em arquivos
04JSON-RPCenvelope de mensagens e respostas
05LSPcontrato entre IDE e linguagem
06DAPcontrato separado para depuração
Uma IDE não adivinha: ela conserva versões, consulta modelos e transforma respostas em ações visíveis.
01
Arquivo aberto, workspace e projeto são estados diferentes.
A raiz define a fronteira de confiança
ConceitoNa Oficina
Arquivo abertosnapshot em memória
Workspaceraiz permitida e configurações
Projetomanifesto Pulso e grafo de módulos
Pacoteunidade importável declarada

Caminhos e symlinks são resolvidos e precisam permanecer na raiz. Abrir a pasta indexa texto; não compila nem executa código.

02
O índice transforma arquivos em relações.
Definições, referências e módulos
matematica.pulso          principal.pulso
Def soma #S17 ◀────────── Ref soma #S17
SymbolId #S17 → definição + tipo + referências
O vínculo usa identidade resolvida, não apenas as letras “soma”.

Arquivo alterado substitui suas entradas numa nova geração. Para documentos abertos, o snapshot de memória tem precedência sobre o disco.

03
Rename semântico não é buscar e substituir.
Textos iguais podem ser símbolos diferentes
função soma(...)  ← alterar
texto = "soma"    ← não alterar
// chama soma     ← não alterar
objeto.soma       ← outro símbolo
soma(1, 2)        ← alterar referência resolvida
A pergunta é: quais nós apontam para SymbolId #S17?

O novo nome é simulado nos escopos afetados. Colisões são recusadas com local preciso.

04
Refatoração multiarquivo é uma transação.
Preparar, visualizar, validar e aplicar
WorkspaceEdit {
 expected_versions: { "matematica.pulso": 8, "principal.pulso": 21 },
 changes: [TextEdit { range, new_text: "totalizar" }]
}
VALIDAR → DIFF → CONFIRMAR → TEMPORÁRIOS
→ COMMIT de todos ou ROLLBACK → REANALISAR
Undo de refatoração não é undo de digitação nem histórico Git.
05
A análise sai da janela e ganha um contrato.
Servidor de linguagem Pulso
Oficina cliente ◀── JSON-RPC / LSP ──▶ pulso-language-server
janela e editor                         AST, Crivo, símbolos, índice
LSP é o protocolo; não é o analisador.

JSON-RPC define pedidos, notificações, resultados e erros. LSP organiza métodos e tipos. Outro cliente compatível pode reutilizar o servidor.

06
Um subconjunto real e documentado do LSP.
Capacidades explícitas
MétodoEntrega
initializecapacidades
didOpen / didChangeversões
publishDiagnosticsCrivo
completion / hoverassistência
definition / referencesíndice
renameWorkspaceEdit

O transporte usa Content-Length e JSON por stdin/stdout. Cancelamento usa $/cancelRequest.

07
IDE, linter, compilador e debugger continuam separados.
A Oficina coordena
Oficinaedição e experiência
Servidor Pulsoconhecimento interativo
Crivoregras e correções
Compiladorbuild solicitado
Vigiaprocesso pausado

DAP é o protocolo separado de depuração. A integração envia breakpoints ao Vigia e mostra frames; não reconstrói o debugger.

08
Um rename, de ponta a ponta.
Oficina 1.0
usuário pede rename → servidor resolve #S17
→ índice acha 7 referências → valida escopos e versões
→ WorkspaceEdit → Oficina mostra diff → confirmação
→ transação aplica → reanálise → Crivo e compilador satisfeitos
Cada seta possui contrato, versão e condição de falha.

VS Code, IntelliJ, rust-analyzer e clangd operam em escala muito maior. A Oficina é didática e funcional, sem plugins, edição colaborativa ou LSP completo.

Fontes: Unicode, LSP, JSON-RPC e DAP.

Resposta final

Uma IDE compreende código em movimento porque mantém documentos versionados, tolera árvores incompletas, resolve símbolos num índice e conversa por protocolos verificáveis.

PROJETO COMPLETO · ESTADO EXATO DESTE CAPÍTULO

Baixe a Oficina 1.0.

Pacote exclusivo com código Rust, fixtures Pulso, testes e limites documentados. Nenhum arquivo externo é aberto ou executado automaticamente.

Baixar Oficina 1.0 (.zip)Linux + Wayland · Rust · fixtures isoladas

O que este artigo fez você pensar?

Dúvidas, experiências e contrapontos ajudam a próxima pessoa a enxergar o assunto por outro ângulo.

Todos passam por moderação. Ao enviar, você concorda com a política de privacidade.

Receba os próximos artigos.

Uma mensagem quando uma nova investigação estiver pronta. Só isso.