diff options
Diffstat (limited to '.eslintrc.js')
-rw-r--r-- | .eslintrc.js | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..5da22e7 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,168 @@ +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", + ], + parser: "vue-eslint-parser", + parserOptions: { + parser: "@typescript-eslint/parser", + sourceType: "module", + requireConfigFile: false, + }, + plugins: [ + "jsdoc", + "@typescript-eslint", + ], + rules: { + "yoda": "error", + eqeqeq: [ "warn", "smart" ], + "linebreak-style": [ "error", "unix" ], + "camelcase": [ "warn", { + "properties": "never", + "ignoreImports": true + }], + "no-unused-vars": [ "warn", { + "args": "none" + }], + indent: [ + "error", + 4, + { + ignoredNodes: [ "TemplateLiteral" ], + SwitchCase: 1, + }, + ], + quotes: [ "error", "double" ], + semi: "error", + "vue/html-indent": [ "error", 4 ], // default: 2 + "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", + "no-multi-spaces": [ "error", { + ignoreEOLComments: true, + }], + "array-bracket-spacing": [ "warn", "always", { + "singleValue": true, + "objectsInArrays": false, + "arraysInArrays": false + }], + "space-before-function-paren": [ "error", { + "anonymous": "always", + "named": "never", + "asyncArrow": "always" + }], + "curly": "error", + "object-curly-spacing": [ "error", "always" ], + "object-curly-newline": "off", + "object-property-newline": "error", + "comma-spacing": "error", + "brace-style": "error", + "no-var": "error", + "key-spacing": "warn", + "keyword-spacing": "warn", + "space-infix-ops": "error", + "arrow-spacing": "warn", + "no-trailing-spaces": "error", + "no-constant-condition": [ "error", { + "checkLoops": false, + }], + "space-before-blocks": "warn", + //"no-console": "warn", + "no-extra-boolean-cast": "off", + "no-multiple-empty-lines": [ "warn", { + "max": 1, + "maxBOF": 0, + }], + "lines-between-class-members": [ "warn", "always", { + exceptAfterSingleLine: true, + }], + "no-unneeded-ternary": "error", + "array-bracket-newline": [ "error", "consistent" ], + "eol-last": [ "error", "always" ], + //"prefer-template": "error", + "template-curly-spacing": [ "warn", "never" ], + "comma-dangle": [ "warn", "only-multiline" ], + "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": [ + { + "files": [ "src/languages/*.js", "src/icon.js" ], + "rules": { + "comma-dangle": [ "error", "always-multiline" ], + } + }, + + // 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", + } + } + ] +}; |