module.exports = { ignorePatterns: ["test/*.js", "server/modules/*", "src/util.js"], root: true, env: { browser: true, commonjs: true, es2020: true, node: true, }, extends: [ "eslint:recommended", "plugin:vue/vue3-recommended", "plugin:jsdoc/recommended-error", "prettier", // Disables ESLint formatting rules that conflict with Prettier ], parser: "vue-eslint-parser", parserOptions: { parser: "@typescript-eslint/parser", sourceType: "module", requireConfigFile: false, }, plugins: ["jsdoc", "@typescript-eslint"], rules: { yoda: "error", eqeqeq: ["warn", "smart"], camelcase: [ "warn", { properties: "never", ignoreImports: true, }, ], "no-unused-vars": [ "warn", { args: "none", }, ], "vue/max-attributes-per-line": "off", "vue/singleline-html-element-content-newline": "off", "vue/html-self-closing": "off", "vue/require-component-is": "off", // not allow is="style" https://github.com/vuejs/eslint-plugin-vue/issues/462#issuecomment-430234675 "vue/attribute-hyphenation": "off", // This change noNL to "no-n-l" unexpectedly "vue/multi-word-component-names": "off", curly: "error", "no-var": "error", "no-throw-literal": "error", "no-constant-condition": [ "error", { checkLoops: false, }, ], //"no-console": "warn", "no-extra-boolean-cast": "off", "no-unneeded-ternary": "error", //"prefer-template": "error", "no-empty": [ "error", { allowEmptyCatch: true, }, ], "no-control-regex": "off", "one-var": ["error", "never"], "max-statements-per-line": ["error", { max: 1 }], "jsdoc/check-tag-names": [ "error", { definedTags: ["link"], }, ], "jsdoc/no-undefined-types": "off", "jsdoc/no-defaults": ["error", { noOptionalParamNames: true }], "jsdoc/require-throws": "warn", "jsdoc/require-jsdoc": [ "error", { require: { FunctionDeclaration: true, MethodDefinition: true, }, }, ], "jsdoc/no-blank-block-descriptions": "error", "jsdoc/require-returns-description": "warn", "jsdoc/require-returns-check": ["error", { reportMissingReturnForUndefinedTypes: false }], "jsdoc/require-returns": [ "warn", { forceRequireReturn: true, forceReturnsWithAsync: true, }, ], "jsdoc/require-param-type": "warn", "jsdoc/require-param-description": "warn", }, overrides: [ // Override for TypeScript { files: ["**/*.ts"], extends: ["plugin:@typescript-eslint/recommended"], rules: { "jsdoc/require-returns-type": "off", "jsdoc/require-param-type": "off", "@typescript-eslint/no-explicit-any": "off", "prefer-const": "off", }, }, ], };