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.