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.
função soma(a, b) {
··retorne a + b
}
mostre(so▌)✓ Crivo: sem erros
→ soma(a, b)
● Vigia disponível
VOCABULÁRIO VISUAL
As peças desta etapa da Oficina.
| Conceito | Na Oficina |
|---|---|
| Arquivo aberto | snapshot em memória |
| Workspace | raiz permitida e configurações |
| Projeto | manifesto Pulso e grafo de módulos |
| Pacote | unidade 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.
matematica.pulso principal.pulso Def soma #S17 ◀────────── Ref soma #S17 SymbolId #S17 → definição + tipo + referências
Arquivo alterado substitui suas entradas numa nova geração. Para documentos abertos, o snapshot de memória tem precedência sobre o disco.
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
O novo nome é simulado nos escopos afetados. Colisões são recusadas com local preciso.
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
Oficina cliente ◀── JSON-RPC / LSP ──▶ pulso-language-server janela e editor AST, Crivo, símbolos, índice
JSON-RPC define pedidos, notificações, resultados e erros. LSP organiza métodos e tipos. Outro cliente compatível pode reutilizar o servidor.
| Método | Entrega |
|---|---|
| initialize | capacidades |
| didOpen / didChange | versões |
| publishDiagnostics | Crivo |
| completion / hover | assistência |
| definition / references | índice |
| rename | WorkspaceEdit |
O transporte usa Content-Length e JSON por stdin/stdout. Cancelamento usa $/cancelRequest.
| Oficina | edição e experiência |
| Servidor Pulso | conhecimento interativo |
| Crivo | regras e correções |
| Compilador | build solicitado |
| Vigia | processo pausado |
DAP é o protocolo separado de depuração. A integração envia breakpoints ao Vigia e mostra frames; não reconstrói o debugger.
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
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.
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.