const globals = require("globals");
const js = require("@eslint/js");
+const erb = require("eslint-plugin-erb");
+const stylisticJs = require("@stylistic/eslint-plugin-js");
module.exports = [
js.configs.recommended,
+ erb.configs.recommended,
{
+ ignores: [
+ "app/assets/javascripts/i18n/",
+ "coverage/assets/",
+ "public/assets/",
+ "vendor/"
+ ]
+ },
+ {
+ plugins: {
+ "@stylistic": stylisticJs
+ },
languageOptions: {
- ecmaVersion: 2015,
+ ecmaVersion: 2021,
sourceType: "script",
globals: {
...globals.browser,
L: "readonly",
OSM: "writable",
Matomo: "readonly",
- Qs: "readonly",
Turbo: "readonly",
updateLinks: "readonly"
}
},
+ linterOptions: {
+ // The "unused disable directive" is set to "warn" by default.
+ // For the ERB plugin to work correctly, you must disable
+ // this directive to avoid issues described here
+ // https://github.com/eslint/eslint/discussions/18114
+ // If you're using the CLI, you might also use the following flag:
+ // --report-unused-disable-directives-severity=off
+ reportUnusedDisableDirectives: "off"
+ },
rules: {
- "accessor-pairs": "error",
- "array-bracket-newline": ["error", "consistent"],
- "array-bracket-spacing": "error",
- "array-callback-return": "error",
- "block-scoped-var": "error",
- "block-spacing": "error",
- "brace-style": ["error", "1tbs", { allowSingleLine: true }],
- "comma-dangle": "error",
- "comma-spacing": "error",
- "comma-style": "error",
- "computed-property-spacing": "error",
- "curly": ["error", "multi-line", "consistent"],
- "dot-location": ["error", "property"],
- "dot-notation": "error",
- "eol-last": "error",
- "eqeqeq": ["error", "smart"],
- "func-call-spacing": "error",
- "indent": ["error", 2, {
+ "@stylistic/array-bracket-newline": ["error", "consistent"],
+ "@stylistic/array-bracket-spacing": "error",
+ "@stylistic/block-spacing": "error",
+ "@stylistic/brace-style": ["error", "1tbs", { allowSingleLine: true }],
+ "@stylistic/comma-dangle": "error",
+ "@stylistic/comma-spacing": "error",
+ "@stylistic/comma-style": "error",
+ "@stylistic/computed-property-spacing": "error",
+ "@stylistic/dot-location": ["error", "property"],
+ "@stylistic/eol-last": "error",
+ "@stylistic/func-call-spacing": "error",
+ "@stylistic/indent": ["error", 2, {
SwitchCase: 1,
VariableDeclarator: "first",
FunctionDeclaration: { parameters: "first" },
FunctionExpression: { parameters: "first" },
CallExpression: { arguments: "first" }
}],
- "key-spacing": "error",
- "keyword-spacing": "error",
- "no-alert": "warn",
+ "@stylistic/key-spacing": "error",
+ "@stylistic/keyword-spacing": "error",
+ "@stylistic/no-floating-decimal": "error",
+ "@stylistic/no-mixed-operators": "error",
+ "@stylistic/no-multiple-empty-lines": "error",
+ "@stylistic/no-multi-spaces": "error",
+ "@stylistic/no-trailing-spaces": "error",
+ "@stylistic/no-whitespace-before-property": "error",
+ "@stylistic/object-curly-newline": ["error", { consistent: true }],
+ "@stylistic/object-curly-spacing": ["error", "always"],
+ "@stylistic/object-property-newline": ["error", { allowAllPropertiesOnSameLine: true }],
+ "@stylistic/operator-linebreak": ["error", "after"],
+ "@stylistic/padded-blocks": ["error", "never"],
+ "@stylistic/quote-props": ["error", "consistent-as-needed", { keywords: true, numbers: true }],
+ "@stylistic/quotes": ["error", "double"],
+ "@stylistic/semi": ["error", "always"],
+ "@stylistic/semi-spacing": "error",
+ "@stylistic/semi-style": "error",
+ "@stylistic/space-before-blocks": "error",
+ "@stylistic/space-before-function-paren": ["error", { named: "never" }],
+ "@stylistic/space-in-parens": "error",
+ "@stylistic/space-infix-ops": "error",
+ "@stylistic/space-unary-ops": "error",
+ "@stylistic/switch-colon-spacing": "error",
+ "@stylistic/wrap-iife": "error",
+ "@stylistic/wrap-regex": "error",
+
+ "accessor-pairs": "error",
+ "array-callback-return": "error",
+ "block-scoped-var": "error",
+ "curly": ["error", "multi-line", "consistent"],
+ "dot-notation": "error",
+ "eqeqeq": ["error", "smart"],
+ "no-alert": "error",
"no-array-constructor": "error",
"no-caller": "error",
"no-console": "warn",
"no-extend-native": "error",
"no-extra-bind": "error",
"no-extra-label": "error",
- "no-floating-decimal": "error",
"no-implicit-coercion": "warn",
- "no-implicit-globals": "warn",
+ "no-implicit-globals": "error",
"no-implied-eval": "error",
"no-invalid-this": "error",
"no-iterator": "error",
"no-lone-blocks": "error",
"no-lonely-if": "error",
"no-loop-func": "error",
- "no-mixed-operators": "error",
- "no-multiple-empty-lines": "error",
- "no-multi-spaces": "error",
"no-multi-str": "error",
"no-negated-condition": "error",
"no-nested-ternary": "error",
"no-new": "error",
"no-new-func": "error",
- "no-new-object": "error",
"no-new-wrappers": "error",
+ "no-object-constructor": "error",
"no-octal-escape": "error",
"no-param-reassign": "error",
- "no-process-env": "error",
"no-proto": "error",
"no-script-url": "error",
"no-self-compare": "error",
"no-sequences": "error",
"no-throw-literal": "error",
- "no-trailing-spaces": "error",
"no-undef-init": "error",
"no-undefined": "error",
"no-unmodified-loop-condition": "error",
"no-use-before-define": ["error", { functions: false }],
"no-void": "error",
"no-warning-comments": "warn",
- "no-whitespace-before-property": "error",
- "object-curly-newline": ["error", { consistent: true }],
- "object-curly-spacing": ["error", "always"],
- "object-property-newline": ["error", { allowAllPropertiesOnSameLine: true }],
- "operator-linebreak": ["error", "after"],
- "padded-blocks": ["error", "never"],
- "quote-props": ["error", "consistent-as-needed", { keywords: true, numbers: true }],
- "quotes": ["error", "double"],
"radix": ["error", "always"],
- "semi": ["error", "always"],
- "semi-spacing": "error",
- "semi-style": "error",
- "space-before-blocks": "error",
- "space-before-function-paren": ["error", { named: "never" }],
- "space-in-parens": "error",
- "space-infix-ops": "error",
- "space-unary-ops": "error",
- "switch-colon-spacing": "error",
- "wrap-iife": "error",
- "wrap-regex": "error",
"yoda": "error"
}
},