module.exports = { root: true, env: { browser: true, commonjs: true, es6: true, }, extends: ["eslint:recommended", "plugin:react/recommended"], parser: "babel-eslint", parserOptions: { ecmaFeatures: { jsx: true, modules: true, experimentalObjectRestSpread: true, }, ecmaVersion: 2020, sourceType: "module", }, plugins: ["react"], rules: { // general indent: ["error", 2, { SwitchCase: 1, ignoredNodes: ["TemplateLiteral"] }], "linebreak-style": ["error", "unix"], quotes: ["error", "single"], semi: ["error", "always"], "comma-dangle": [ "error", { arrays: "never", objects: "never", imports: "never", exports: "never", functions: "ignore", }, ], "object-curly-spacing": ["error", "always"], "eol-last": ["error", "always"], "no-console": process.env.NODE_ENV === "production" ? "error" : "warn", complexity: ["error", { max: 20 }], eqeqeq: ["error", "always"], // react "react/no-unescaped-entities": ["error", { forbid: [">", '"', "}"] }], "react/prop-types": [2, { ignore: ["action", "dispatch", "nav", "navigation"] }], "react/jsx-boolean-value": 2, "react/jsx-no-undef": 2, "react/react-in-jsx-scope": "off", // allow jsx syntax in js files (for next.js project) "react/jsx-filename-extension": [1, { extensions: [".js", ".jsx"] }], //should add ".ts" if typescript project "react/jsx-sort-props": [ 2, { callbacksLast: true, shorthandFirst: true, ignoreCase: true, noSortAlphabetically: true, }, ], "react/jsx-pascal-case": 2, "react/display-name": [0, { ignoreTranspilerName: false }], }, // Map from global var to bool specifying if it can be redefined globals: { __DEV__: true, __dirname: false, __fbBatchedBridgeConfig: false, alert: false, cancelAnimationFrame: false, cancelIdleCallback: false, clearImmediate: true, clearInterval: false, clearTimeout: false, console: false, document: false, escape: false, Event: false, EventTarget: false, exports: false, fetch: false, FormData: false, global: false, Map: true, module: false, navigator: false, process: false, Promise: true, requestAnimationFrame: true, requestIdleCallback: true, require: false, Set: true, setImmediate: true, setInterval: false, setTimeout: false, window: false, XMLHttpRequest: false, }, settings: { react: { version: require("./package.json").dependencies.react, }, }, };