Static-Analysis

O predicado que ninguém chamou

Go tree-sitter static-analysis ollanta CGo
Como uma linha de código ausente fez 20 regras de análise estática produzirem centenas de falsos positivos por meses

O Tree-sitter é uma biblioteca que produz árvores sintáticas concretas para dezenas de linguagens. Diferente de um parser tradicional que produz AST, tree-sitter foi projetado para editores de código e ele é incremental, tolerante a erros e capaz de reanalisar um arquivo em milissegundos após uma edição. O Neovim, Atom (RIP), Zed e o próprio GitHub usam tree-sitter para syntax highlighting, folding e code navigation.

O Ollanta usa tree-sitter de uma forma diferente: para análise estática. Em vez de realçar sintaxe, ele usa S-expressions para detectar padrões problemáticos no código-fonte:

Leia mais →

Resolução de um bug silencioso em Go

Go concurrency channels static-analysis ollanta
Como um select ausente quase matou o graceful shutdown do projeto

Um canal que não escuta

Canais em Go é uma daquelas features que parecem simples até você precisar usá-la em produção com centenas de goroutines concorrentes. E é aí que “a jiripoca começa a piar”.

Este artigo conta a história de um bug silencioso que encontrei durante uma revisão de código no Ollanta, um projeto pessoal de análise de código estático multi-linguagem escrito em Go. O bug não quebrava testes, não produzia panic, não gerava erro no linter. Mas, em condições específicas, impedia o graceful shutdown do scanner por tempo indeterminado.

Leia mais →