aboutsummaryrefslogtreecommitdiff
path: root/eslint.config.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'eslint.config.mjs')
-rw-r--r--eslint.config.mjs111
1 files changed, 111 insertions, 0 deletions
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 000000000..d298f0462
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,111 @@
+import { fixupConfigRules, fixupPluginRules } from "@eslint/compat";
+import react from "eslint-plugin-react";
+import reactHooks from "eslint-plugin-react-hooks";
+import onlyAscii from "eslint-plugin-only-ascii";
+import testingLibrary from "eslint-plugin-testing-library";
+import jest from "eslint-plugin-jest";
+import jestDom from "eslint-plugin-jest-dom";
+import jsdoc from "eslint-plugin-jsdoc";
+import globals from "globals";
+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: ["src/main/resources/static/scripts.js", "target/**/*"],
+}, ...fixupConfigRules(compat.extends(
+ "eslint:recommended",
+ "plugin:promise/recommended",
+ "plugin:react/recommended",
+ "plugin:react/jsx-runtime",
+ "plugin:react-hooks/recommended",
+ "plugin:jest/recommended",
+ "plugin:jest-dom/recommended",
+)),
+jsdoc.configs['flat/recommended'],
+{
+ plugins: {
+ react: fixupPluginRules(react),
+ "react-hooks": fixupPluginRules(reactHooks),
+ "only-ascii": onlyAscii,
+ "testing-library": testingLibrary,
+ jest: fixupPluginRules(jest),
+ "jest-dom": fixupPluginRules(jestDom),
+ jsdoc,
+ },
+
+ languageOptions: {
+ globals: {
+ ...globals.browser,
+ ...globals.node,
+ ...jest.environments.globals.globals,
+ },
+
+ ecmaVersion: 12,
+ sourceType: "module",
+
+ parserOptions: {
+ ecmaFeatures: {
+ jsx: true,
+ },
+ },
+ },
+
+ settings: {
+ react: {
+ pragma: "React",
+ version: "18",
+ },
+
+ jsdoc: {
+ mode: "typescript",
+ },
+ },
+
+ rules: {
+ quotes: ["error", "single"],
+ "no-cond-assign": "warn",
+ "no-unused-vars": "warn",
+ "no-useless-escape": "warn",
+
+ "only-ascii/only-ascii": ["warn", {
+ allowedChars: "✓←→♡ ·—©",
+ }],
+
+ "react/prop-types": "off",
+ "testing-library/no-node-access": "off",
+
+ "jsdoc/require-jsdoc": ["warn", {
+ publicOnly: true,
+ }],
+
+ "jsdoc/require-returns": "off",
+ "jsdoc/require-returns-type": "off",
+ "jsdoc/require-property-description": "off",
+ "jsdoc/require-param-description": "off",
+
+ "jsdoc/check-tag-names": ["error", {
+ definedTags: ["jest-environment"],
+ }],
+
+ "promise/always-return": "off",
+
+ semi: ["error", "never", {
+ beforeStatementContinuationChars: "always",
+ }],
+
+ "semi-style": ["error", "last"],
+ },
+}, ...compat.extends("plugin:testing-library/react").map(config => ({
+ ...config,
+ files: ["**/__tests__/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[jt]s?(x)"],
+}))];