Como uma IDE entende o código enquanto digitamos?
Você escreveu metade de uma expressão. O programa ainda é inválido, mas a IDE mantém cores, encontra símbolos e sugere a função certa. Como ela trabalha com algo que ainda não terminou?
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.
| Camada | Pergunta |
|---|---|
| Lexer | que formas aparecem? |
| Parser | como elas se organizam? |
| Semântica | que nomes e escopos representam? |
| Crivo | há padrões válidos, porém suspeitos? |
mostre(soma(10, ▌
CallExpr
├─ callee: soma
├─ arg: Number(10)
└─ arg: ErrorExpr { esperado: expressão }Tokens e nós carregam intervalos. Pontos de sincronização como vírgula, chave, quebra e fim permitem continuar analisando depois do erro.
v41 “som” ─ análise lenta ──────────┐ descartar v42 “soma” ─ análise rápida ────────┴ pintar v42
struct Snapshot { version: u64, text: Arc<Document> }
struct Analysis { version: u64, ast: Ast, symbols: SymbolTable }A implementação inicial reanalisa tudo. Depois, uma edição invalida a função que contém seu intervalo; funções intactas conservam hashes e resultados. Se a estrutura superior mudou, voltamos à análise completa.
| Fixture | Completa | Incremental |
|---|---|---|
| 1.000 linhas | 7,4 ms | 1,2 ms |
| 10.000 linhas | 66 ms | 3,8 ms |
Diagnostic {
severity: Warning,
message: "valor nunca usado",
range: 84..91,
fixes: [TextEdit { range: 72..92, replacement: "" }]
}As regras vêm do Crivo. A correção só é aplicada se a versão esperada continuar atual.
arquivo ├─ função soma(a, b) │ └─ parâmetros a, b └─ função principal() └─ local soma? → sombrearia função
tecla → documento v42 → AST parcial → escopo → palavras-chave + variáveis + funções → filtro “so” → ranking por prefixo, proximidade e tipo → popup v42
A fila conserva o snapshot mais recente. Um debounce curto agrupa digitação; autocomplete explícito não espera. O worker consulta cancelamento entre lexer, parser e semântica. Testes provocam v41 e v42 fora de ordem e provam que v41 nunca vence.
Parser e AST não esperam perfeição. Eles produzem uma fotografia parcial e versionada; escopos geram candidatos; a Oficina pinta somente respostas atuais.
PROJETO COMPLETO · ESTADO EXATO DESTE CAPÍTULO
Baixe a Oficina 0.2.
Pacote exclusivo com código Rust, fixtures Pulso, testes e limites documentados. Nenhum arquivo externo é aberto ou executado automaticamente.