Plugins ESLint
Instale e configure plugins ESLint para React, TypeScript, acessibilidade, Tailwind CSS e testes.
Busque em todas as páginas da documentação
Instale e configure plugins ESLint para React, TypeScript, acessibilidade, Tailwind CSS e testes.
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥
Cartão de receita de referência rápida - pronto para copiar e colar.
# Plugins principais (a maioria incluída com next/core-web-vitals)
npm install --save-dev eslint-plugin-react eslint-plugin-react-hooks
# TypeScript
npm install --save-dev @typescript-eslint/eslint-plugin @typescript-eslint/parser
# Imports
npm install --save-dev eslint-plugin-import
# Acessibilidade
npm install --save-dev eslint-plugin-jsx-a11y
# Tailwind CSS
npm install --save-dev eslint-plugin-tailwindcss
# Testing Library
npm install --save-dev eslint-plugin-testing-libraryQuando usar isso: Quando você precisar de regras além do que next/core-web-vitals oferece - ordenação de classes Tailwind, melhores práticas de teste ou verificações de acessibilidade mais rigorosas.
// eslint.config.mjs
import { FlatCompat } from "@eslint/eslintrc";
import tailwindcss from "eslint-plugin-tailwindcss";
import { dirname } from "path";
import { fileURLToPath } from "url";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const compat = new FlatCompat({ baseDirectory: __dirname });
const eslintConfig = [
// Presets do Next.js (inclui react, react-hooks, import, jsx-a11y)
...compat.extends("next/core-web-vitals", "next/typescript"),
// Plugin Tailwind CSS (suporte nativo para configuração flat)
...tailwindcss.configs["flat/recommended"],
// Testing Library (apenas para arquivos de teste)
{
files: ["**/*.test.{ts,tsx}", "**/*.spec.{ts,tsx}"],
...compat.extends("plugin:testing-library/react")[0],
},
// Sobrescritas de regras personalizadas
{
rules: {
// Tailwind
"tailwindcss/classnames-order": "warn",
"tailwindcss/no-custom-classname": "off",
// Acessibilidade
"jsx-a11y/anchor-is-valid": "warn",
"jsx-a11y/alt-text": "error",
// TypeScript
"@typescript-eslint/no-unused-vars": [
"error",
{ argsIgnorePattern: "^_" },
],
"@typescript-eslint/consistent-type-imports": "error",
// Imports
"import/order": [
"warn",
{
groups: [
"builtin",
"external",
"internal",
["parent", "sibling"],
"index",
"type",
],
"newlines-between": "always",
alphabetize: { order: "asc" },
},
],
},
},
];
export default eslintConfig;O que isso demonstra:
react/, jsx-a11y/)next/core-web-vitals já inclui eslint-plugin-react, eslint-plugin-react-hooks, eslint-plugin-next, eslint-plugin-import e eslint-plugin-jsx-a11ytailwindcss e testing-library são adicionados por cimaconfigs["flat/recommended"] diretamente; outros precisam de FlatCompatVisão geral dos plugins:
| Plugin | Namespace | O que faz |
|---|---|---|
eslint-plugin-react | react/ | Melhores práticas de JSX, padrões de componentes |
eslint-plugin-react-hooks | react-hooks/ | Regras de Hooks e verificação de dependências |
@typescript-eslint/eslint-plugin | @typescript-eslint/ | Regras específicas de TypeScript |
eslint-plugin-import | import/ | Ordenação de imports, sem duplicatas, sem não resolvidos |
eslint-plugin-jsx-a11y | jsx-a11y/ | Regras de acessibilidade para elementos JSX |
eslint-plugin-tailwindcss | tailwindcss/ | Ordenação de classes, sem classes contraditórias |
eslint-plugin-testing-library | testing-library/ | Melhores práticas para Testing Library |
Regras chave do plugin Tailwind:
{
rules: {
"tailwindcss/classnames-order": "warn", // Ordena classes
"tailwindcss/no-custom-classname": "off", // Permite classes personalizadas
"tailwindcss/no-contradicting-classname": "error", // Captura p-4 p-8
"tailwindcss/enforces-negative-arbitrary-values": "warn",
},
}Plugin Testing Library (com escopo para arquivos de teste):
{
files: ["**/*.test.{ts,tsx}", "**/*.spec.{ts,tsx}"],
rules: {
"testing-library/await-async-queries": "error",
"testing-library/no-debugging-utils": "warn",
"testing-library/no-dom-import": "error",
"testing-library/prefer-screen-queries": "warn",
},
}// Regras chave do @typescript-eslint:
// no-unused-vars - detecta imports e variáveis não utilizados
// no-explicit-any - sinaliza o uso do tipo `any`
// consistent-type-imports - impõe a sintaxe `import type { X }`
// no-non-null-assertion - sinaliza asserções `obj!.prop`
// prefer-nullish-coalescing - sinaliza `||` onde `??` é mais seguro
// Estes complementam o modo estrito do tsconfig, mas detectam
// coisas diferentes (padrões vs tipos)Coisas que vão te pegar. Cada armadilha inclui o que dá errado, por que acontece e a correção.
Registro duplicado de plugin - Instalar eslint-plugin-react manualmente quando next/core-web-vitals já o inclui causa conflitos. Correção: Verifique o que o preset inclui antes de adicionar plugins. Adicione apenas plugins que não estejam já incluídos.
Plugin Tailwind requer configuração - eslint-plugin-tailwindcss precisa encontrar seu arquivo tailwind.config.*. Se sua configuração estiver em um local não padrão, o plugin falha silenciosamente. Correção: Defina a opção config nas configurações do plugin.
Plugin de teste em todos os arquivos - Aplicar regras do testing-library globalmente sinaliza código não relacionado a testes. Correção: Sempre escopoe com files: ["**/*.test.*"].
Compatibilidade com configuração flat - Nem todos os plugins suportam configuração flat nativamente. Alguns precisam de encapsulamento FlatCompat, o que pode causar comportamento inesperado. Correção: Verifique o README do plugin para suporte à configuração flat e use FlatCompat apenas quando necessário.
Desempenho com muitos plugins - Cada plugin adiciona tempo de análise e verificação de regras. Cinco ou mais plugins podem diminuir notavelmente a velocidade do linting. Correção: Use TIMING=1 npx eslint . para perfilar quais regras são lentas e desabilite qualquer uma que você não precise.
Outras maneiras de resolver o mesmo problema - e quando cada uma é a melhor escolha.
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Biome | Você quer linting + formatação em uma única ferramenta rápida | Você precisa de regras Tailwind ou de teste |
Apenas next/core-web-vitals | Os plugins incluídos são suficientes para seu projeto | Você precisa de ordenação de classes Tailwind ou regras de teste |
oxlint | Você quer linting ultrarrápido com regras comuns | Você precisa de regras específicas de plugins (Tailwind, teste) |
eslint-plugin-reacteslint-plugin-react-hookseslint-plugin-nexteslint-plugin-importeslint-plugin-jsx-a11yVocê não precisa instalá-los separadamente.
{
files: ["**/*.test.{ts,tsx}", "**/*.spec.{ts,tsx}"],
rules: {
"testing-library/await-async-queries": "error",
"testing-library/prefer-screen-queries": "warn",
},
}Use a propriedade files para restringir regras a globs correspondentes.
tailwindcss/classnames-order ordena as classes Tailwind na ordem recomendada.tailwindcss/no-contradicting-classname detecta conflitos como p-4 p-8.tailwindcss/no-custom-classname sinaliza classes que não estão na configuração Tailwind (frequentemente desativado).tailwind.config.* na raiz do projeto por padrão.config nas configurações do plugin.configs["flat/recommended"] diretamente.FlatCompat para funcionar com a configuração flat do ESLint 9.TIMING=1 npx eslint . para encontrar as regras mais lentas e desabilitar aquelas que você não precisa."@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }],
"@typescript-eslint/consistent-type-imports": "error",
"@typescript-eslint/no-explicit-any": "warn",Estes são incluídos via next/typescript, mas você pode sobrescrever a severidade deles.
files: ["**/*.test.*", "**/*.spec.*"].react/, @typescript-eslint/, jsx-a11y/, etc.npx eslint --print-config src/app/page.tsx para ver todas as regras ativas e suas fontes.jsx-a11y/alt-text requer atributos alt em imagens.jsx-a11y/anchor-is-valid avisa sobre âncoras sem href válido.@typescript-eslint detecta padrões de código (variáveis não usadas, promises flutuantes, any explícito).tsconfig detectam problemas em nível de tipo (verificações de nulo, any implícito, acesso a índice não verificado).Revisado por Chris St. John·Última atualização: 16 de jul. de 2026
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥