{ "parser": "@typescript-eslint/parser", "extends": [ "plugin:@typescript-eslint/recommended", "plugin:fp/recommended", "plugin:react/recommended", "plugin:relay/recommended", "airbnb", "prettier", "prettier/react", "prettier/@typescript-eslint" ], "plugins": [ "fp", "react-hooks", "relay", "prettier" ], "env": { "jest": true, "browser": true, "node": true }, "globals": { "__": true, "process": true }, "rules": { "prettier/prettier": "error", "import/no-extraneous-dependencies": ["error", { "devDependencies": ["etc/**", "stories/**", "**/__tests__/*"] }], "no-undefined": "error", "react/display-name": "error", "react/jsx-filename-extension": ["error", { "extensions": [".tsx"] }], "react-hooks/rules-of-hooks": "error", "react-hooks/exhaustive-deps": "warn", // OFF "camelcase": "off", // GraphQL "no-underscore-dangle": "off", // GraphQL "fp/no-nil": "off", // Side effects "fp/no-this": "off", // React "fp/no-mutation": "off", // React "fp/no-rest-parameters": "off", // React props "fp/no-unused-expression": "off", // 'fs' calls, for example "react/default-props-match-prop-types": "off", // Flow/ESlint conflict "react/require-default-props": "off", // Somehow semantically wrong "react/jsx-props-no-spreading": "off", // Has use cases "react/prop-types": "off", // Broken rule "jsx-a11y/anchor-is-valid": "off", // Relative paths bullshit "@typescript-eslint/explicit-function-return-type": "off", // Inference, duh "@typescript-eslint/no-var-requires": "off", // Configs "@typescript-eslint/prefer-interface": "off", // Why the fuck would I? "@typescript-eslint/camelcase": "off", // Relay "@typescript-eslint/ban-ts-ignore": "off" // Broken types }, "settings": { "import/resolver": { "babel-module": { "root": ["./src"], "extensions": [".js", ".ts", ".tsx"] }, "node": { "extensions": [".js", ".ts", ".tsx"] } } } }