module.exports = {
    "root": true,
    "parser": '@typescript-eslint/parser',
    "parserOptions": {
        "tsconfigRootDir": __dirname,
        "project": ['./tsconfig.json'],
        "sourceType": "module",
    },
    "plugins": [
        "@typescript-eslint",
        "prettier",
        "unused-imports",
    ],
    "extends": [
        "airbnb",
        "plugin:@typescript-eslint/recommended-requiring-type-checking",
        "plugin:prettier/recommended"
    ],
    "settings": {
        "import/resolver": {
            "node": {
                "extensions": [
                    ".js",
                    ".jsx",
                    ".ts",
                    ".tsx"
                ]
            }
        }
    },
    "ignorePatterns": [
        "src/app/main/documentation/material-ui-components/components/**",
        "src/app/main/documentation/material-ui-components/pages/**",
        "tailwind.config.js"
    ],
    "rules": {
        "prettier/prettier": [
            "warn",
            {
                "endOfLine": "auto",
                "arrowParens": "always",
                "bracketSpacing": true,
                "jsxBracketSameLine": false,
                "printWidth": 120,
                "proseWrap": "preserve",
                "requirePragma": false,
                "semi": true,
                "singleQuote": true,
                "tabWidth": 4,
                "trailingComma": "none",
                "useTabs": true,
                "singleAttributePerLine": true
            }
        ],
        "quotes": [
            1,
            "single",
            {
                "allowTemplateLiterals": true,
                "avoidEscape": true
            }
        ],
        // Disabling because this rule is extremely slow.
        "import/no-cycle": "off",
        // Disabling because this rule is slow and not a common violation.
        "import/no-named-as-default": "off",
        // Disabling because this rule is slow and not a common violation.
        "import/no-named-as-default-member": "off",
        // This rule is already covered by the TypeScript compiler.
        "import/default": "off",
        // This rule is already covered by the TypeScript compiler.
        "import/no-unresolved": "off",
        "operator-linebreak": "off",
        "no-param-reassign": "off",
        "implicit-arrow-linebreak": "off",
        "max-len": "off",
        "indent": "off",
        "no-shadow": "off",
        "arrow-parens": "off",
        "no-confusing-arrow": "off",
        "no-use-before-define": "off",
        "object-curly-newline": "off",
        "function-paren-newline": "off",
        "import/prefer-default-export": "off",
        "max-classes-per-file": "off",
        "react/jsx-filename-extension": "off",
        "import/extensions": "off",
        "@typescript-eslint/no-unused-vars": "off",
        "no-unused-vars": "off", // or "@typescript-eslint/no-unused-vars": "off",
        "unused-imports/no-unused-imports": "error",
        "unused-imports/no-unused-vars": [
            "warn",
            { "vars": "all", "varsIgnorePattern": "^_", "args": "after-used", "argsIgnorePattern": "^_" }
        ],
        "@typescript-eslint/ban-ts-ignore": "off",
        "@typescript-eslint/no-empty-function": "off",
        "@typescript-eslint/explicit-function-return-type": "off",
        "@typescript-eslint/no-var-requires": "off",
        "@typescript-eslint/no-use-before-define": "off",
        "@typescript-eslint/no-useless-constructor": "error",
        "@typescript-eslint/explicit-module-boundary-types": "off",
        "@typescript-eslint/no-floating-promises": "off",
        "@typescript-eslint/no-misused-promises": "off",
        "@typescript-eslint/require-await": "off",
        "no-useless-constructor": "off",
        "no-tabs": "off",
        "react/jsx-indent": "off",
        "react/jsx-indent-props": "off",
        "react/react-in-jsx-scope": "off",
        "react/jsx-uses-react": "off",
        "react/jsx-wrap-multilines": "off",
        "react/prop-types": "warn",
        "react/require-default-props": "off",
        "react/no-unescaped-entities": "off",
        "no-underscore-dangle": "off",
        "react/jsx-no-bind": "off",
        "react/jsx-props-no-spreading": "off",
        "react/no-array-index-key": "off",
        "no-restricted-exports": ["off", { "restrictedNamedExports": ["default"] }],
        "import/no-import-module-exports": "off",
        "import/no-extraneous-dependencies": "off"
    },
}
