Smells of AI-Generated Code.
Recurring problems in code written by AI coding assistants — how to recognize each one, why models produce it, how to fix it, and the rules that detect it.
Um assistente de IA envolve o código em funções, classes ou interfaces extras que adicionam uma camada de indireção sem esconder nenhuma complexidade nem permitir reutilização — abstrações que apenas repassam para um único ponto de chamada.
Assistentes de IA tendem a colar uma cópia nova e levemente ajustada de uma lógica existente em vez de reutilizar ou extrair uma função compartilhada, inflando o código duplicado enquanto a refatoração desaparece silenciosamente.
Assistentes de IA empilham código novo e quase duplicado ao lado do que já existe em vez de reestruturá-lo, então a duplicação cresce e a refatoração — o retrabalho que mantém uma base de código saudável — desaparece silenciosamente.
O modelo escreve à mão código sob medida para algo que uma biblioteca padrão, uma dependência existente ou um helper já presente no repositório já faz — adicionando lógica duplicada e menos testada em vez de chamar o que já existe.
Código gerado por IA que chama funções, métodos, parâmetros, chaves de configuração ou pacotes que parecem plausíveis, mas que não existem na versão real da biblioteca da qual você depende.
Assistentes de IA tendem a gerar código que trata apenas o caso bem-sucedido e bem-formado — pulando validação de entrada, tratamento de erros, verificações de nulo/vazio e casos extremos — de modo que o código funciona na demonstração e quebra em produção.
Assistentes de IA produzem código funcional que silenciosamente omite os controles de segurança que um humano adicionaria por hábito — validação de entrada, autorização, codificação de saída, tratamento de segredos — porque "compila e retorna 200" parece estar pronto.
Comentários que são artefatos da conversa de geração — prompts reformulados, narração passo a passo, comentários de bate-papo e elisões com placeholders como `// ... resto do código aqui` — versionados no código-fonte em vez de documentação real.
Assistentes de IA enchem uma lógica simples de comentários redundantes, cerimônia defensiva e blocos quase duplicados copiados e colados em vez de reutilizar ou extrair código existente, inflando a contagem de linhas sem agregar valor.
Um assistente de IA nomeia código novo com placeholders genéricos ou uma convenção nova que ignora os identificadores existentes e o vocabulário do domínio do repositório, corroendo a legibilidade e gerando conceitos duplicados e mal descritos.
Código gerado por IA que ignora silenciosamente as convenções estabelecidas de um repositório — reinventando helpers, escolhendo a biblioteca errada e usando nomenclatura e tratamento de erros fora do padrão da casa — fazendo a base de código derivar em direção a um estilo genérico, médio da internet.
Assistentes de IA emitem com confiança APIs, bibliotecas e expressões idiomáticas que eram atuais anos atrás, mas que agora estão descontinuadas, removidas ou substituídas, porque seu conhecimento paramétrico está congelado em um corte de treinamento e o padrão antigo ainda é o estatisticamente mais comum em seu corpus.
Assistentes de IA se protegem contra falhas que não podem acontecer, embrulhando código já seguro em verificações de null redundantes, cláusulas de guarda mortas e blocos try/except pega-tudo que adicionam complexidade sem adicionar segurança.
Assistentes de IA incorporam valores específicos de ambiente — URLs, portas, caminhos, timeouts, chaves e números mágicos — diretamente na lógica, em vez de lê-los a partir de configuração ou do ambiente, porque um literal é o próximo token mais provável e o modelo desconhece sua camada de configuração existente.