Melhores Práticas de Linting e Formatação
Um resumo condensado das 25 melhores práticas mais importantes, extraídas de todas as páginas desta seção.
Busque em todas as páginas da documentação
Um resumo condensado das 25 melhores práticas mais importantes, extraídas de todas as páginas desta seção.
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥
eslint.config.mjs e exclua todos os arquivos .eslintrc.* restantes, pois o ESLint volta para o formato legado se ambos existirem e sua configuração plana for ignorada silenciosamente.extends, então envolva-os com FlatCompat({ baseDirectory: __dirname }) e recrie __dirname via fileURLToPath(import.meta.url) em ESM.{ ignores: [...] } só funciona como um ignore global quando é a única chave em seu objeto; misturá-lo com rules o transforma em um filtro por arquivo.eslint-plugin-react, react-hooks, next, import e jsx-a11y, então raramente você precisa instalar esses plugins separadamente e pode adicionar apenas o que está faltando."error" para regras que você deseja impor (falhar CI, bloquear builds) e reserve "warn" para regras para as quais você está migrando, pois avisos passam na CI e se acumulam silenciosamente.no-unused-vars base e habilite @typescript-eslint/no-unused-vars com argsIgnorePattern: "^_" para que a sintaxe de interface/type-alias/enum seja entendida e os conflitos desapareçam.import type { … } para imports apenas de tipos para que os bundlers possam apagar completamente os tipos e seu grafo de tipos permaneça claramente separado do seu grafo de valores.react-hooks/exhaustive-deps ativado (geralmente como "warn") e suprima-o por linha com // eslint-disable-next-line apenas para referências comprovadamente estáveis como dispatch ou refs.import/order com categorias agrupadas (builtin, external, internal, parent/sibling, index, type), "newlines-between": "always" e alphabetização; execute eslint --fix uma vez e adicione quaisquer linhas em branco ausentes manualmente.next/core-web-vitals já inclui (react, react-hooks, next, import, jsx-a11y) causa registro duplicado e comportamento inesperado de regras, então verifique o preset primeiro.eslint-plugin-testing-library com files: ["**/*.test.{ts,tsx}", "**/*.spec.{ts,tsx}"]; aplicado globalmente, ele produz falsos positivos em código não relacionado a testes.TIMING=1 npx eslint . quando os tempos de lint aumentarem - cinco ou mais plugins ativos podem diminuir significativamente o linting, e as regras @typescript-eslint que entendem tipos são 2-5x mais lentas porque exigem informações de tipo completas."prettier" deve ser o último item em seu array extends, pois ela apenas desativa regras de formatação e qualquer configuração listada depois dela reativará conflitos..next/, node_modules/, arquivos de lock e código gerado; um arquivo de ignore explícito mantém as execuções rápidas e evita alterações não intencionais.prettier-plugin-tailwindcss deve estar no final do array plugins do Prettier ou ele entrará em conflito com outros plugins do Prettier e a ordenação de classes falhará."endOfLine": "lf" em .prettierrc e configure git config --global core.autocrlf input para que contribuidores do Windows não enviem arquivos CRLF que falhem no prettier --check no CI do Linux..vscode/settings.json e .vscode/extensions.json (não launch.json ou *.code-workspace) para que cada desenvolvedor herde o mesmo comportamento de formatar ao salvar, ESLint e extensões recomendadas.editor.defaultFormatter tanto globalmente quanto por idioma ([typescript], [typescriptreact], [json]) para evitar que o VS Code escolha um formatador aleatório quando vários estão instalados.typescript.tsdk para node_modules/typescript/lib para que a verificação de tipos do editor corresponda à versão que tsc usa em CI, eliminando a derivação de tipos "funciona na minha máquina"."strict": true para as oito verificações agrupadas e adicione noUncheckedIndexedAccess, noImplicitReturns, noFallthroughCasesInSwitch e verbatimModuleSyntax, pois elas não estão incluídas em strict."strict": false e habilite strictNullChecks primeiro, depois noImplicitAny, usando // @ts-expect-error (não @ts-ignore) para que as supressões falhem automaticamente assim que o problema subjacente for corrigido."type-check": "tsc --noEmit" e confie em incremental: true mais um .tsbuildinfo em cache para velocidade."prepare": "husky" em package.json para que os hooks de pré-commit sejam instalados automaticamente após npm install, e mantenha os hooks rápidos executando apenas lint-staged (com eslint --fix --no-warn-ignored) - nunca tsc completo.prettier --check e tsc --noEmit no GitHub Actions usando npm ci para instalações determinísticas, uma versão do Node fixada correspondente, um grupo concurrency com cancel-in-progress: true e regras de proteção de branch que exigem que o job passe antes do merge.Revisado por Chris St. John·Última atualização: 16 de jul. de 2026
🤖 Read the SystemsArchitect.io Blog for over 100+ cloud architecture articles 🔥