mirror of https://github.com/thelounge/thelounge
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
4.4 KiB
191 lines
4.4 KiB
// @ts-check |
|
const {defineConfig} = require("eslint-define-config"); |
|
|
|
const projects = defineConfig({ |
|
parserOptions: { |
|
project: [ |
|
"./tsconfig.json", |
|
"./client/tsconfig.json", |
|
"./server/tsconfig.json", |
|
"./test/tsconfig.json", |
|
], |
|
}, |
|
}).parserOptions.project; |
|
|
|
const baseRules = defineConfig({ |
|
rules: { |
|
"block-scoped-var": "error", |
|
curly: ["error", "all"], |
|
"dot-notation": "error", |
|
eqeqeq: "error", |
|
"handle-callback-err": "error", |
|
"no-alert": "error", |
|
"no-catch-shadow": "error", |
|
"no-control-regex": "off", |
|
"no-console": "error", |
|
"no-duplicate-imports": "error", |
|
"no-else-return": "error", |
|
"no-implicit-globals": "error", |
|
"no-restricted-globals": ["error", "event", "fdescribe"], |
|
"no-template-curly-in-string": "error", |
|
"no-unsafe-negation": "error", |
|
"no-useless-computed-key": "error", |
|
"no-useless-constructor": "error", |
|
"no-useless-return": "error", |
|
"no-use-before-define": [ |
|
"error", |
|
{ |
|
functions: false, |
|
}, |
|
], |
|
"no-var": "error", |
|
"object-shorthand": [ |
|
"error", |
|
"methods", |
|
{ |
|
avoidExplicitReturnArrows: true, |
|
}, |
|
], |
|
"padding-line-between-statements": [ |
|
"error", |
|
{ |
|
blankLine: "always", |
|
prev: ["block", "block-like"], |
|
next: "*", |
|
}, |
|
{ |
|
blankLine: "always", |
|
prev: "*", |
|
next: ["block", "block-like"], |
|
}, |
|
], |
|
"prefer-const": "error", |
|
"prefer-rest-params": "error", |
|
"prefer-spread": "error", |
|
"spaced-comment": ["error", "always"], |
|
strict: "off", |
|
yoda: "error", |
|
}, |
|
}).rules; |
|
|
|
const vueRules = defineConfig({ |
|
rules: { |
|
"import/no-default-export": 0, |
|
"import/unambiguous": 0, // vue SFC can miss script tags |
|
"@typescript-eslint/prefer-readonly": 0, // can be used in template |
|
"vue/component-tags-order": [ |
|
"error", |
|
{ |
|
order: ["template", "style", "script"], |
|
}, |
|
], |
|
"vue/multi-word-component-names": "off", |
|
"vue/no-mutating-props": "off", |
|
"vue/no-v-html": "off", |
|
"vue/require-default-prop": "off", |
|
"vue/v-slot-style": ["error", "longform"], |
|
}, |
|
}).rules; |
|
|
|
const tsRules = defineConfig({ |
|
rules: { |
|
// note you must disable the base rule as it can report incorrect errors |
|
"no-shadow": "off", |
|
"@typescript-eslint/no-shadow": ["error"], |
|
}, |
|
}).rules; |
|
|
|
const tsRulesTemp = defineConfig({ |
|
rules: { |
|
// TODO: eventually remove these |
|
"@typescript-eslint/ban-ts-comment": "off", |
|
"@typescript-eslint/no-explicit-any": "off", |
|
"@typescript-eslint/no-non-null-assertion": "off", |
|
"@typescript-eslint/no-this-alias": "off", |
|
"@typescript-eslint/no-unnecessary-type-assertion": "off", |
|
"@typescript-eslint/no-unsafe-argument": "off", |
|
"@typescript-eslint/no-unsafe-assignment": "off", |
|
"@typescript-eslint/no-unsafe-call": "off", |
|
"@typescript-eslint/no-unsafe-member-access": "off", |
|
"@typescript-eslint/no-unused-vars": "off", |
|
}, |
|
}).rules; |
|
|
|
const tsTestRulesTemp = defineConfig({ |
|
rules: { |
|
// TODO: remove these |
|
"@typescript-eslint/no-unsafe-return": "off", |
|
"@typescript-eslint/no-empty-function": "off", |
|
"@typescript-eslint/restrict-plus-operands": "off", |
|
}, |
|
}).rules; |
|
|
|
module.exports = defineConfig({ |
|
root: true, |
|
parserOptions: { |
|
ecmaVersion: 2022, |
|
}, |
|
overrides: [ |
|
{ |
|
files: ["**/*.ts", "**/*.vue"], |
|
parser: "@typescript-eslint/parser", |
|
parserOptions: { |
|
tsconfigRootDir: __dirname, |
|
project: projects, |
|
extraFileExtensions: [".vue"], |
|
}, |
|
plugins: ["@typescript-eslint"], |
|
extends: [ |
|
"eslint:recommended", |
|
"plugin:@typescript-eslint/recommended", |
|
"plugin:@typescript-eslint/recommended-requiring-type-checking", |
|
"prettier", |
|
], |
|
rules: { |
|
...baseRules, |
|
...tsRules, |
|
...tsRulesTemp, |
|
}, |
|
}, |
|
{ |
|
files: ["**/*.vue"], |
|
parser: "vue-eslint-parser", |
|
parserOptions: { |
|
ecmaVersion: 2022, |
|
ecmaFeatures: { |
|
jsx: true, |
|
}, |
|
parser: "@typescript-eslint/parser", |
|
tsconfigRootDir: __dirname, |
|
project: projects, |
|
}, |
|
plugins: ["vue"], |
|
extends: [ |
|
"eslint:recommended", |
|
"plugin:vue/vue3-recommended", |
|
"plugin:@typescript-eslint/recommended", |
|
"plugin:@typescript-eslint/recommended-requiring-type-checking", |
|
"prettier", |
|
], |
|
rules: {...baseRules, ...tsRules, ...tsRulesTemp, ...vueRules}, |
|
}, |
|
{ |
|
files: ["./tests/**/*.ts"], |
|
parser: "@typescript-eslint/parser", |
|
rules: { |
|
...baseRules, |
|
...tsRules, |
|
...tsRulesTemp, |
|
...tsTestRulesTemp, |
|
}, |
|
}, |
|
], |
|
env: { |
|
es6: true, |
|
browser: true, |
|
mocha: true, |
|
node: true, |
|
}, |
|
extends: ["eslint:recommended", "prettier"], |
|
rules: baseRules, |
|
});
|
|
|