X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/7f3cb3c6246e6e271761e714cceb081e85a4d245..eee793f5e6e534442793c88f06caca2ccb5c12d1:/config/eslint.js diff --git a/config/eslint.js b/config/eslint.js index a52b1e63f..f70cbc6c0 100644 --- a/config/eslint.js +++ b/config/eslint.js @@ -1,11 +1,17 @@ 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, { + plugins: { + "@stylistic": stylisticJs + }, languageOptions: { - ecmaVersion: 2015, + ecmaVersion: 2021, sourceType: "script", globals: { ...globals.browser, @@ -15,39 +21,72 @@ module.exports = [ 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", @@ -57,7 +96,6 @@ module.exports = [ "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-implied-eval": "error", @@ -68,25 +106,20 @@ module.exports = [ "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", @@ -99,29 +132,22 @@ module.exports = [ "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" } }, + { + // Additional configuration for test files + files: ["test/**/*.js"], + languageOptions: { + globals: { + ...globals.mocha, + expect: "readonly", + assert: "readonly", + should: "readonly" + } + } + }, { files: ["config/eslint.js"], languageOptions: {