Migrate ESLint to `eslint.config.mjs`
authorAlexander Ebert <ebert@woltlab.com>
Fri, 1 Nov 2024 15:59:45 +0000 (16:59 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Fri, 1 Nov 2024 15:59:45 +0000 (16:59 +0100)
.eslintignore [deleted file]
.eslintrc.js [deleted file]
eslint.config.mjs [new file with mode: 0644]

diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644 (file)
index 272756e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-**/*.js
-extra
-node_modules/**
diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644 (file)
index 1c0a031..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-module.exports = {
-  root: true,
-  parser: "@typescript-eslint/parser",
-  parserOptions: {
-    tsconfigRootDir: __dirname,
-    project: [
-      "./tsconfig.json",
-      "./ts/WoltLabSuite/WebComponent/tsconfig.json"
-    ]
-  },
-  plugins: ["@typescript-eslint"],
-  extends: [
-    "eslint:recommended",
-    "plugin:@typescript-eslint/recommended",
-    "plugin:@typescript-eslint/recommended-requiring-type-checking",
-    "prettier"
-  ],
-  rules: {
-    "@typescript-eslint/ban-types": [
-      "error", {
-        types: {
-          "object": false
-        },
-        extendDefaults: true
-      }
-    ],
-    "@typescript-eslint/no-explicit-any": 0,
-    "@typescript-eslint/no-non-null-assertion": 0,
-    "@typescript-eslint/no-unsafe-argument": 0,
-    "@typescript-eslint/no-unsafe-assignment": 0,
-    "@typescript-eslint/no-unsafe-call": 0,
-    "@typescript-eslint/no-unsafe-member-access": 0,
-    "@typescript-eslint/no-unsafe-return": 0,
-    "@typescript-eslint/no-unused-vars": [
-      "error", {
-        "argsIgnorePattern": "^_",
-        "varsIgnorePattern": "^_"
-      }
-    ],
-    "@typescript-eslint/no-misused-promises": [
-      "error", {
-        "checksVoidReturn": false
-      }
-    ]
-  }
-};
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644 (file)
index 0000000..a4c1326
--- /dev/null
@@ -0,0 +1,68 @@
+import typescriptEslint from "@typescript-eslint/eslint-plugin";
+import tsParser from "@typescript-eslint/parser";
+import path from "node:path";
+import { fileURLToPath } from "node:url";
+import js from "@eslint/js";
+import { FlatCompat } from "@eslint/eslintrc";
+
+const __filename = fileURLToPath(import.meta.url);
+const __dirname = path.dirname(__filename);
+const compat = new FlatCompat({
+       baseDirectory: __dirname,
+       recommendedConfig: js.configs.recommended,
+       allConfig: js.configs.all,
+});
+
+export default [
+       {
+               ignores: ["**/*.js", "**/extra", "node_modules/**/*", "eslint.config.mjs"],
+       },
+       ...compat.extends(
+               "eslint:recommended",
+               "plugin:@typescript-eslint/recommended",
+               "plugin:@typescript-eslint/recommended-requiring-type-checking",
+               "prettier",
+       ),
+       {
+               plugins: {
+                       "@typescript-eslint": typescriptEslint,
+               },
+
+               languageOptions: {
+                       parser: tsParser,
+                       ecmaVersion: 5,
+                       sourceType: "script",
+
+                       parserOptions: {
+                               tsconfigRootDir: __dirname,
+                               project: ["./tsconfig.json", "./ts/WoltLabSuite/WebComponent/tsconfig.json"],
+                       },
+               },
+
+               rules: {
+                       "@typescript-eslint/no-explicit-any": 0,
+                       "@typescript-eslint/no-non-null-assertion": 0,
+                       "@typescript-eslint/no-unsafe-argument": 0,
+                       "@typescript-eslint/no-unsafe-assignment": 0,
+                       "@typescript-eslint/no-unsafe-call": 0,
+                       "@typescript-eslint/no-unsafe-member-access": 0,
+                       "@typescript-eslint/no-unsafe-return": 0,
+
+                       "@typescript-eslint/no-unused-vars": [
+                               "error",
+                               {
+                                       argsIgnorePattern: "^_",
+                                       varsIgnorePattern: "^_",
+                               },
+                       ],
+
+                       "@typescript-eslint/no-misused-promises": [
+                               "error",
+                               {
+                                       checksVoidReturn: false,
+                               },
+                       ],
+                       "@typescript-eslint/prefer-promise-reject-errors": ["error", { allowEmptyReject: true }],
+               },
+       },
+];