# ADR-0001 — Alvo ESLint 9 com flat config, não ESLint 10 - **Status**: aceita - **Data**: 2026-08-02 - **Decisores**: ThaSMorato ## Contexto O pacote estava em `eslint@^8` com configs em formato eslintrc. O pedido original era "atualizar para a versão mais estável, ESLint 9+". Durante a sondagem descobriu-se que **ESLint 10.0.0 já é a versão corrente (10.8.0)** e que ela **removeu o eslintrc por completo** — não depreciou, removeu. `.eslintrc.*`, `.eslintignore`, `--no-eslintrc`, `--env`, `--rulesdir` e a variável `ESLINT_USE_FLAT_CONFIG` deixaram de existir. Os três configs do pacote, portanto, não rodam em ESLint 10. O alvo natural seria o 10. Mas o ecossistema de plugins ainda não chegou lá. Peer ranges verificados via `npm view` em 2026-08-02: | Pacote | Versão | peer `eslint` | ESLint 10? | |---|---|---|---| | `neostandard` | 0.13.0 | `^9.0.0` | ❌ | | `eslint-plugin-react` | 7.37.5 | `… ^9.7` | ❌ | | `eslint-plugin-jsx-a11y` | 6.10.2 | `… ^9` | ❌ | | `eslint-plugin-import` | 2.32.0 | `… ^9` | ❌ | | `typescript-eslint` | 8.65.0 | `… ^10.0.0` | ✅ | | `eslint-plugin-react-hooks` | 7.1.1 | `… ^10.0.0` | ✅ | | `eslint-plugin-sonarjs` | 4.2.0 | `… ^10.0.0` | ✅ | Instalar com `eslint@10` falha — reproduzido: ``` npm error ERESOLVE unable to resolve dependency tree npm error peer eslint@"^3 || … || ^9.7" from eslint-plugin-react@7.37.5 ``` Com `eslint@9.39.5` a árvore resolve limpa com todos os plugins. ## Decisão Declarar `peerDependencies: { "eslint": "^9.0.0" }` e escrever os presets em **flat config**. ## Consequências **Positivas** - Flat config é o único formato do ESLint 10, então a migração de formato já está paga. Suportar o 10 vira um bump de peer range, não uma reescrita. - Instalação limpa, sem `--legacy-peer-deps` — obrigatório para um config compartilhado, já que o consumidor não deveria herdar um conflito de árvore. - ESLint 9 continua recebendo correções e é o que a maioria dos projetos usa hoje. **Negativas** - O pacote não instala em projetos que já foram para o ESLint 10. - Fica uma dívida de acompanhamento do upstream. ## Gatilho de revisão Reabrir quando `neostandard`, `eslint-plugin-react` e `eslint-plugin-jsx-a11y` declararem `^10` no peer. `eslint-plugin-import` já foi resolvido — ver [ADR-0003](0003-import-x.md). Checagem rápida: ```sh for p in neostandard eslint-plugin-react eslint-plugin-jsx-a11y; do echo "$p: $(npm view $p peerDependencies.eslint)" done ```