]> git.openstreetmap.org Git - rails.git/blobdiff - config/eslint.js
Enable sort-keys for eslint.js
[rails.git] / config / eslint.js
index fac9d555b55ebbaf6aec18a9f82454a9edbf58f2..f51a1dc474b674a6282dd17ee787361d449892b4 100644 (file)
@@ -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,73 @@ 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: {
+      /* eslint sort-keys: ["warn"] */
+      "@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, {
+        CallExpression: { arguments: "first" },
+        FunctionDeclaration: { parameters: "first" },
+        FunctionExpression: { parameters: "first" },
+        SwitchCase: 1,
+        VariableDeclarator: "first"
+      }],
+      "@stylistic/key-spacing": "error",
+      "@stylistic/keyword-spacing": "error",
+      "@stylistic/no-floating-decimal": "error",
+      "@stylistic/no-mixed-operators": "error",
+      "@stylistic/no-multi-spaces": "error",
+      "@stylistic/no-multiple-empty-lines": "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-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, {
-        SwitchCase: 1,
-        VariableDeclarator: "first",
-        FunctionDeclaration: { parameters: "first" },
-        FunctionExpression: { parameters: "first" },
-        CallExpression: { arguments: "first" }
-      }],
-      "key-spacing": "error",
-      "keyword-spacing": "error",
-      "no-alert": "warn",
+      "no-alert": "error",
       "no-array-constructor": "error",
       "no-caller": "error",
       "no-console": "warn",
@@ -57,68 +97,43 @@ 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-implicit-globals": "error",
       "no-implied-eval": "error",
       "no-invalid-this": "error",
       "no-iterator": "error",
-      "no-labels": "error",
       "no-label-var": "error",
+      "no-labels": "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-unneeded-ternary": "error",
       "no-unused-expressions": "off",
       "no-unused-vars": ["error", { caughtErrors: "none" }],
+      "no-use-before-define": ["error", { functions: false }],
       "no-useless-call": "error",
       "no-useless-concat": "error",
       "no-useless-return": "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"
     }
   },