111 lines
2.7 KiB
JavaScript
111 lines
2.7 KiB
JavaScript
module.exports = {
|
|
root: true,
|
|
env: {
|
|
browser: true,
|
|
es2021: true,
|
|
node: true,
|
|
},
|
|
extends: [
|
|
"eslint:recommended",
|
|
"plugin:react/recommended",
|
|
"plugin:react-hooks/recommended",
|
|
"plugin:@typescript-eslint/recommended",
|
|
"plugin:jsx-a11y/recommended",
|
|
"plugin:import/errors",
|
|
"plugin:import/warnings",
|
|
"plugin:import/typescript",
|
|
"prettier",
|
|
],
|
|
parser: "@typescript-eslint/parser",
|
|
parserOptions: {
|
|
ecmaFeatures: {
|
|
jsx: true,
|
|
},
|
|
ecmaVersion: 2021,
|
|
sourceType: "module",
|
|
},
|
|
plugins: [
|
|
"react",
|
|
"react-hooks",
|
|
"@typescript-eslint",
|
|
"jsx-a11y",
|
|
"import",
|
|
"prettier",
|
|
],
|
|
settings: {
|
|
react: {
|
|
version: "detect",
|
|
},
|
|
"import/resolver": {
|
|
typescript: {},
|
|
node: {
|
|
extensions: [".js", ".jsx", ".ts", ".tsx"],
|
|
},
|
|
},
|
|
},
|
|
rules: {
|
|
// Regras essenciais para segurança e prevenção de erros
|
|
"no-console": ["warn", { allow: ["warn", "error", "info"] }],
|
|
"no-unused-vars": "off", // Desativado em favor da versão TypeScript
|
|
"@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }],
|
|
"no-undef": "error",
|
|
"no-var": "error",
|
|
"prefer-const": "error",
|
|
eqeqeq: ["error", "always"],
|
|
|
|
// Regras específicas do React
|
|
"react/prop-types": "off", // Desnecessário com TypeScript
|
|
"react/react-in-jsx-scope": "off", // Não necessário no React 17+
|
|
"react/jsx-uses-react": "off", // Não necessário no React 17+
|
|
"react/jsx-key": "error",
|
|
"react-hooks/rules-of-hooks": "error",
|
|
"react-hooks/exhaustive-deps": "warn",
|
|
|
|
// Regras de acessibilidade
|
|
"jsx-a11y/anchor-is-valid": "warn",
|
|
|
|
// Estilo e formatação
|
|
"prettier/prettier": "warn",
|
|
|
|
// Regras específicas de segurança
|
|
"no-eval": "error",
|
|
"no-implied-eval": "error",
|
|
|
|
// Regras para evitar SQL injection (útil para código de backend)
|
|
"@typescript-eslint/no-explicit-any": "warn",
|
|
|
|
// Regras para importações
|
|
"import/no-unresolved": "error",
|
|
"import/named": "error",
|
|
"import/default": "error",
|
|
"import/namespace": "error",
|
|
"import/order": [
|
|
"warn",
|
|
{
|
|
groups: [
|
|
"builtin",
|
|
"external",
|
|
"internal",
|
|
"parent",
|
|
"sibling",
|
|
"index",
|
|
],
|
|
"newlines-between": "always",
|
|
alphabetize: { order: "asc", caseInsensitive: true },
|
|
},
|
|
],
|
|
},
|
|
overrides: [
|
|
// Regras específicas para arquivos de teste
|
|
{
|
|
files: ["**/*.test.ts", "**/*.test.tsx", "**/*.spec.ts", "**/*.spec.tsx"],
|
|
env: {
|
|
jest: true,
|
|
},
|
|
rules: {
|
|
"@typescript-eslint/no-explicit-any": "off",
|
|
},
|
|
},
|
|
],
|
|
};
|