144 lines
5.1 KiB
JSON
144 lines
5.1 KiB
JSON
{
|
|
"$schema": "./node_modules/oxlint/configuration_schema.json",
|
|
"plugins": ["oxc", "unicorn", "typescript", "import", "node", "promise"],
|
|
"categories": {
|
|
"correctness": "error",
|
|
"suspicious": "error",
|
|
"pedantic": "warn",
|
|
"perf": "warn"
|
|
},
|
|
"rules": {
|
|
// It's a TypeScript project, it should use ECMA imports
|
|
"import/no-amd": "error",
|
|
"import/no-commonjs": "error",
|
|
|
|
// Restrict dangerous practices
|
|
"eslint/eqeqeq": ["error", "always", { "null": "ignore" }],
|
|
"default-case": "error",
|
|
"no-bitwise": "error",
|
|
"no-console": "off",
|
|
"no-empty": "error",
|
|
"no-empty-function": "error",
|
|
"no-iterator": "error",
|
|
"no-plusplus": "error",
|
|
"no-proto": "error",
|
|
"no-regex-spaces": "error",
|
|
"no-restricted-globals": "error",
|
|
"no-unused-expressions": "error",
|
|
"no-var": "error",
|
|
"no-void": "error",
|
|
"no-new-require": "error",
|
|
"no-const-enum": "error",
|
|
"import/no-cycle": "error",
|
|
"import/no-dynamic-require": "error",
|
|
"promise/catch-or-return": "error",
|
|
"promise/spec-only": "error",
|
|
"typescript/no-dynamic-delete": "error",
|
|
"typescript/no-empty-object-type": "error",
|
|
"typescript/no-explicit-any": "error",
|
|
"unicorn/no-abusive-eslint-disable": "error",
|
|
"unicorn/no-length-as-slice-end": "error",
|
|
"unicorn/prefer-number-properties": "error",
|
|
"typescript/no-import-type-side-effects": "error",
|
|
"unicorn/prefer-event-target": "off",
|
|
"unicorn/prefer-add-event-listener": "off",
|
|
|
|
// Enforce browser rules
|
|
"no-alert": "error",
|
|
"no-script-url": "error",
|
|
"unicorn/no-document-cookie": "error",
|
|
|
|
// Enforce styling
|
|
"arrow-body-style": ["error", "as-needed"],
|
|
"curly": "error",
|
|
"default-case-last": "error",
|
|
"default-param-last": "error",
|
|
"func-name": ["error", "as-needed"],
|
|
"func-style": ["error", "declaration", { "allowArrowFunctions": true }],
|
|
"grouped-accessor-pair": ["error", "getBeforeSet"],
|
|
"id-length": ["error", { "exceptions": ["_", "t", "z"] }],
|
|
"max-params": "warn",
|
|
"new-cap": ["error", { "newIsCap": true, "capIsNew": true }],
|
|
"no-duplicate-import": "error",
|
|
"no-extra-label": "error",
|
|
"no-label-var": "error",
|
|
"no-labels": "error",
|
|
"no-lone-blocks": "error",
|
|
"no-magic-number": [
|
|
"warn",
|
|
{
|
|
"ignore": [0, 1, 2],
|
|
"ignoreDefaultValues": true,
|
|
"ignoreClassFieldInitialValues": true,
|
|
"ignoreEnums": true,
|
|
"ignoreNumericLiteralTypes": true
|
|
}
|
|
],
|
|
"no-multi-assign": "error",
|
|
"no-nested-ternary": "error",
|
|
"no-new-func": "error",
|
|
"no-return-assign": "error",
|
|
"no-template-curly-in-string": "error",
|
|
"operator-assignment": ["error", "always"],
|
|
"prefer-exponentiation-operator": "error",
|
|
"prefer-object-spread": "error",
|
|
"prefer-promise-reject-errors": "error",
|
|
"prefer-rest-params": "error",
|
|
"prefer-spread": "error",
|
|
"import/first": ["error", "absolute-first"],
|
|
"import/no-anonymous-default-export": "error",
|
|
"import/no-duplicates": "error",
|
|
"import/no-mutable-exports": "warn",
|
|
"import/no-named-default": "error",
|
|
"import/no-namespace": "warn",
|
|
"import/no-default-export": "warn", // TODO: move to error once migrated
|
|
"promise/avoid-new": "warn", // Maybe error ?
|
|
"promise/no-nesting": "error",
|
|
"promise/no-return-wrap": "error",
|
|
"promise/param-names": "error",
|
|
"promise/prefer-await-to-callbacks": "warn", // Maybe error ?
|
|
"promise/prefer-await-to-then": "error", // Maybe error ?
|
|
"promise/prefer-catch": "error",
|
|
"typescript/adjacent-overload-signatures": "error",
|
|
"typescript/array-type": ["error", { "default": "array" }],
|
|
"typescript/consistent-generic-constructors": "error",
|
|
"typescript/consistent-indexed-object-style": ["error", "record"],
|
|
"typescript/consistent-type-definitions": ["error", "type"],
|
|
"typescript/consistent-type-imports": "error",
|
|
"typescript/no-empty-interface": "error",
|
|
"typescript/no-inferrable-types": "warn", // Maybe error ?
|
|
"typescript/prefer-for-of": "error",
|
|
"typescript/prefer-function-type": "error",
|
|
"typescript/no-non-null-asserted-nullish-coalescing": "error",
|
|
"unicorn/error-message": "error",
|
|
"unicorn/no-array-method-this-argument": "error",
|
|
"unicorn/no-await-expression-member": "error",
|
|
"unicorn/no-console-spaces": "error",
|
|
"unicorn/no-zero-fractions": "error",
|
|
"unicorn/number-literal-case": "error",
|
|
"unicorn/prefer-array-flat-map": "error",
|
|
"unicorn/prefer-logical-operator-over-ternary": "error",
|
|
"unicorn/no-array-for-each": "error",
|
|
"unicorn/no-array-reduce": "warn",
|
|
"unicorn/no-magic-array-flat-depth": "error",
|
|
"unicorn/no-process-exit": "error",
|
|
"unicorn/prefer-modern-math-apis": "error",
|
|
"unicorn/prefer-node-protocol": "error",
|
|
"typescript/explicit-function-return-type": "warn"
|
|
},
|
|
"overrides": [
|
|
{
|
|
"files": ["src/composables/**/*.ts", "src/utils/**/*.ts", "*.config.ts"],
|
|
"rules": {
|
|
"no-default-export": "off"
|
|
}
|
|
},
|
|
{
|
|
"files": ["src/stores/**/*.ts", "src/composables/**/*.ts"],
|
|
"rules": {
|
|
"max-lines-per-function": "off"
|
|
}
|
|
}
|
|
]
|
|
}
|