diff options
Diffstat (limited to 'eslint.config.mjs')
-rw-r--r-- | eslint.config.mjs | 111 |
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)"], +}))]; |