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", }, }, ], };