# ADR-0004 — Manter o Prettier acoplado como regra do ESLint - **Status**: aceita - **Data**: 2026-08-02 - **Decisores**: ThaSMorato ## Contexto O config roda o Prettier via `eslint-plugin-prettier`, com as opções inline (`printWidth: 80`, `singleQuote`, `semi: false`, `trailingComma: 'all'`, `arrowParens: 'always'`). A documentação do próprio Prettier desaconselha esse acoplamento: cada violação de formatação vira um erro de lint, o que deixa o ESLint mais lento e mistura ruído de formatação com achados reais de correção. A recomendação atual é usar apenas `eslint-config-prettier`, para desligar as regras conflitantes, e rodar o Prettier como passo separado. ## Decisão **Manter o acoplamento.** Decisão do dono do pacote, tomada com a contrapartida na mesa. O fator decisivo é o custo no consumidor: desacoplar exigiria que **todo projeto** que estende este config passasse a ter o próprio `.prettierrc` e o próprio script de formatação. Hoje eles herdam a formatação de graça ao estender um único preset — que é o ponto de existir um config compartilhado. ## Consequências **Positivas** - Zero mudança para os projetos consumidores; a formatação continua vindo junto. - Uma fonte única de verdade para as opções de formatação, versionada aqui. **Negativas** - Lint mais lento — o Prettier roda em cima de cada arquivo. - O output do ESLint mistura formatação com correção. - Contraria a recomendação corrente do upstream. ## Nota de implementação `eslint-plugin-prettier/recommended` já embute o `eslint-config-prettier`, então não é preciso declará-lo à parte. Esse bloco **fecha o array** do config base, para que desligue qualquer regra de formatação que um plugin acima tenha ligado. Combina com `noStyle: true` no neostandard ([ADR-0002](0002-neostandard.md)): a formatação tem um dono só. ## Gatilho de revisão Se o tempo de lint incomodar, o caminho de saída sem quebrar consumidores é publicar um entry adicional (ex.: `@thasmorato/eslint-config/node-no-format`) e migrar projeto a projeto, em vez de trocar o comportamento do entry existente.