/*
 * @Author: Kane
 * @Date: 2023-03-14 09:19:21
 * @LastEditors: Kane
 * @FilePath: /task_schedule/.eslintrc.cjs
 * @Description: eslint 配置文件
 *
 * Copyright (c) ${2022} by Kane, All Rights Reserved.
 */
module.exports = {
    root: true,
    env: { //  需要在env中指定运行的环境，这些环境其实就是一组预定义的全局变量，让 ESLint 知道当前环境存在这些全局变量
        node: true,
        browser: true,
        es2021: true,
    },
    parser:"espree",
    parserOptions:{
        sourceType: "module",
        ecmaVersion: 2021,
    },
    extends:["eslint:recommended",],
    rules:{
        indent: ["warn", 4,],
        // 圆括号中的空格，为空不加空格，紧跟花括号、方括号、圆括号时也不加入空格
        "space-in-parens": ["error", "always", { exceptions: ["{}", "[]", "()", "empty",], },],
        "no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
        "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
        "no-unused-vars": "warn",
        semi: ["error", "always",], // 控制行尾部分号
        quotes: ["error", "double",],
        "comma-dangle": ["error", {
            arrays: "always",
            objects: "always",
            imports: "never",
            exports: "never",
            functions: "never",
        },], // 数组和对象键值对最后一个逗号
        "comma-style": ["error", "last",], //  逗号在行位
        "no-undef-init": "error",
        "no-invalid-this": "error",
        "no-use-before-define": "error",
        "no-shadow-restricted-names": "error", //  禁止对一些关键字或者保留字进行赋值操作，比如NaN、Infinity、undefined、eval、arguments等
        "comma-spacing": ["error", { before: false, after: true, },],
        "array-bracket-spacing": ["error", "never", {
            singleValue: false,
            objectsInArrays: false,
            arraysInArrays: false,
        },],
        "brace-style": ["error", "allman", { allowSingleLine: true, },],
        "prefer-const": "warn",
        "space-before-function-paren": ["error", {
            anonymous: "always",
            named: "never",
            asyncArrow: "always",
        },],
    },
    overrides: [
        {
            files: ["*.vue",],
            parser: "vue-eslint-parser",
            parserOptions: {
                ecmaVersion: 2021,
                sourceType: "module",
                parser: { // <script>标签中的lang属性配置不同的parser
                    ts: "@typescript-eslint/parser",
                    js: "espree",
                    "<template>": "espree",
                },
                project: "./tsconfig.json",
                extraFileExtensions: [".vue",],
            },
            plugins: ["eslint-plugin-vue",],
            extends: [
                "plugin:vue/vue3-essential",
                "plugin:vue/recommended",
                "eslint:recommended",
                "standard-with-typescript", 
                "plugin:@typescript-eslint/eslint-recommended",
                "plugin:@typescript-eslint/recommended",
            ],
            rules: {
                indent: ["warn", 4,],
                "no-trailing-spaces": ["error", {"ignoreComments": true,},],
                // 圆括号中的空格，为空不加空格，紧跟花括号、方括号、圆括号时也不加入空格
                "space-in-parens": ["error", "always", { exceptions: ["{}", "[]", "()", "empty",], },],
                "no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
                "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
                "no-unused-vars": "warn",
                "semi-spacing": ["error", {"before": false, "after": true,},], // 控制行尾部分号
                "quotes": ["error", "double",],
                "comma-dangle": ["error", {
                    arrays: "always",
                    objects: "always",
                    imports: "never",
                    exports: "never",
                    functions: "never",
                },], // 数组和对象键值对最后一个逗号
                "comma-style": ["error", "last",], //  逗号在行位
                "no-undef-init": "error",
                "no-invalid-this": "error",
                "no-use-before-define": "error",
                "no-shadow-restricted-names": "error", //  禁止对一些关键字或者保留字进行赋值操作，比如NaN、Infinity、undefined、eval、arguments等
                "brace-style": ["error", "allman", { allowSingleLine: true, },],
                "prefer-const": "warn",
                "space-before-function-paren": ["error", {
                    anonymous: "always",
                    named: "never",
                    asyncArrow: "always",
                },],
                // vue
                "vue/html-indent": ["error", 4,],
                // typescript
                "@typescript-eslint/indent": ["warn", 4,],
                "@typescript-eslint/no-explicit-any": "warn",
                "@typescript-eslint/no-unsafe-argument": "warn",
                "@typescript-eslint/no-extra-semi": "off",
                "@typescript-eslint/no-inferrable-types": "off",
                "@typescript-eslint/no-unused-vars": "warn",
                "@typescript-eslint/ban-ts-comment": "warn",
                "@typescript-eslint/member-delimiter-style": "off",
                "@typescript-eslint/semi": ["error", "always",], //  控制行尾部分号
                "@typescript-eslint/brace-style": ["error", "allman", { allowSingleLine: true, },],
                "@typescript-eslint/comma-dangle": ["error", {
                    arrays: "always",
                    objects: "always",
                    imports: "never",
                    exports: "never",
                    functions: "never",
                },], // 数组和对象键值对最后一个逗号
                "@typescript-eslint/quotes": ["error", "double",],
                "@typescript-eslint/space-before-function-paren": "off",
                // 方括号的空格问题
                "comma-spacing": ["error", { before: false, after: true, },],
                "@typescript-eslint/comma-spacing": ["off", { before: false, after: true, },], // 使用eslint的，不用ts的
                "array-bracket-spacing": ["error", "never", {
                    singleValue: false,
                    objectsInArrays: false,
                    arraysInArrays: false,
                },],
            },
        },
        {
            files: ["*.ts",],
            parser: "@typescript-eslint/parser",
            parserOptions: {
                project: "./tsconfig.json",
            },
            plugins: ["@typescript-eslint",],
            extends: [
                "eslint:recommended",
                "standard-with-typescript",
                "plugin:@typescript-eslint/eslint-recommended",
                "plugin:@typescript-eslint/recommended",
            ],
            rules: {
                "no-trailing-spaces": ["error", {"ignoreComments": true,},],
                // 圆括号中的空格，为空不加空格，紧跟花括号、方括号、圆括号时也不加入空格
                "space-in-parens": ["error", "always", { exceptions: ["{}", "[]", "()", "empty",], },],
                "no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
                "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
                "@typescript-eslint/no-explicit-any": "off",
                "@typescript-eslint/no-unsafe-argument": "warn",
                "@typescript-eslint/indent": ["error", 4,],
                "@typescript-eslint/no-extra-semi": "off",
                "@typescript-eslint/no-inferrable-types": "off",
                "@typescript-eslint/no-unused-vars": "warn",
                "@typescript-eslint/ban-ts-comment": "warn",
                "@typescript-eslint/member-delimiter-style": "off",
                "@typescript-eslint/semi": ["error", "always",], // 控制行尾部分号
                "@typescript-eslint/brace-style": ["error", "allman", { allowSingleLine: true, },],
                "@typescript-eslint/comma-dangle": ["error", {
                    arrays: "always",
                    objects: "always",
                    imports: "never",
                    exports: "never",
                    functions: "never",
                },], // 数组和对象键值对最后一个逗号
                "@typescript-eslint/quotes": ["error", "double",],
                "@typescript-eslint/space-before-function-paren": "off",
                "@typescript-eslint/strict-boolean-expressions": ["error", {
                    allowString: false,
                },],
                "comma-style": ["error", "last",], //  逗号在行位
                "comma-spacing": ["error", { before: false, after: true, },],
                "@typescript-eslint/comma-spacing": ["off", { before: false, after: true, },], // 使用eslint的，不用ts的
                "array-bracket-spacing": ["error", "never", {
                    singleValue: false,
                    objectsInArrays: false,
                    arraysInArrays: false,
                },],
                "no-undef-init": "error",
                "no-invalid-this": "error",
                "no-use-before-define": "error",
                "no-shadow-restricted-names": "error", //  禁止对一些关键字或者保留字进行赋值操作，比如NaN、Infinity、undefined、eval、arguments等
                "prefer-const": "warn",
                "spaced-comment": "error",
                "space-before-function-paren": "off",
                "semi-spacing": ["error", {"before": false, "after": true,},],
            },
        },
    ],
};
