ADRIANOLAUREANO← Artigos
SÉRIE OFICINA · 02/03ANÁLISEAUTOCOMPLETE

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?

ARTIGO 31 · OFICINA 0.2 · CÓDIGO EM MOVIMENTO

1snapshot por versão

5recursos semânticos

0análises antigas pintadas

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

✓ Crivo: sem erros

→ soma(a, b)

● Vigia disponível

VOCABULÁRIO VISUAL

As peças desta etapa da Oficina.

01Árvore parcialAST útil apesar do erro
02Snapshotimagem imutável do documento
03Escoponomes visíveis numa posição
04Diagnósticoproblema com intervalo e severidade
05Debouncepequena espera que evita trabalho inútil
06Rankingordem contextual das sugestões
Uma IDE não adivinha: ela conserva versões, consulta modelos e transforma respostas em ações visíveis.
01
Quatro camadas respondem perguntas diferentes.
Cor não é significado
CamadaPergunta
Lexerque formas aparecem?
Parsercomo elas se organizam?
Semânticaque nomes e escopos representam?
Crivohá padrões válidos, porém suspeitos?
02
Um erro vira nó da árvore, não buraco negro.
Parser tolerante da Pulso
mostre(soma(10, ▌
CallExpr
├─ callee: soma
├─ arg: Number(10)
└─ arg: ErrorExpr { esperado: expressão }
A árvore parcial conserva chamada e contexto do cursor.

Tokens e nós carregam intervalos. Pontos de sincronização como vírgula, chave, quebra e fim permitem continuar analisando depois do erro.

03
Toda resposta pertence a uma versão.
Snapshots impedem o passado de vencer
v41 “som” ─ análise lenta ──────────┐ descartar
v42 “soma” ─ análise rápida ────────┴ pintar v42
Resultado só chega à tela se ainda pertence ao documento aberto.
struct Snapshot { version: u64, text: Arc<Document> }
struct Analysis { version: u64, ast: Ast, symbols: SymbolTable }
04
Primeiro correto; depois incremental e mensurável.
Reuso por região estável

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.

FixtureCompletaIncremental
1.000 linhas7,4 ms1,2 ms
10.000 linhas66 ms3,8 ms
05
O Crivo devolve dados; a Oficina os apresenta.
Diagnóstico, severidade e correção
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.

06
Escopo decide quais nomes existem aqui.
Outline, hover e definição
arquivo
├─ função soma(a, b)
│  └─ parâmetros a, b
└─ função principal()
   └─ local soma? → sombrearia função
Outline lista declarações; hover e definição usam o símbolo resolvido.
07
Autocomplete é consulta ao contexto, não dicionário.
Da tecla ao popup
tecla → documento v42 → AST parcial → escopo
→ palavras-chave + variáveis + funções → filtro “so”
→ ranking por prefixo, proximidade e tipo → popup v42
Prefix matching não é inteligência artificial; o contexto semântico é o valor.
08
Análise não bloqueia a thread do cursor.
Worker, debounce e cancelamento

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.

Resposta do capítulo

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.

Baixar Oficina 0.2 (.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.