Refine lint-staged configuration
[e-mobility-charging-stations-simulator.git] / .eslintrc.json
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644 (file)
index 0000000..bb3b97c
--- /dev/null
@@ -0,0 +1,187 @@
+{
+  "root": true,
+  "env": {
+    "es2020": true,
+    "node": true,
+    "mocha": true
+  },
+  "parserOptions": {
+    "ecmaVersion": 2020,
+    "sourceType": "module"
+  },
+  "extends": [
+    "eslint:recommended",
+    "plugin:import/recommended",
+    "plugin:jsdoc/recommended",
+    "plugin:prettier/recommended"
+  ],
+  "plugins": ["import", "jsdoc"],
+  "settings": {
+    "jsdoc": {
+      "mode": "typescript"
+    },
+    "import/resolver": {
+      "typescript": {
+        "project": "./tsconfig.json"
+      }
+    }
+  },
+  "rules": {
+    "semi": ["error", "always"],
+    "space-before-blocks": ["error", "always"],
+    "curly": ["error", "all"],
+    "brace-style": "error",
+    "eqeqeq": ["error", "always"],
+    "no-else-return": "error",
+    "no-eq-null": "error",
+    "no-extra-bind": "error",
+    "no-lone-blocks": "error",
+    "no-multi-spaces": "error",
+    "no-empty": "error",
+    "no-return-assign": ["error", "always"],
+    "no-useless-catch": "error",
+    "no-useless-return": "error",
+    "no-multiple-empty-lines": [
+      "error",
+      {
+        "max": 2,
+        "maxEOF": 1
+      }
+    ],
+    "block-spacing": "error",
+    // "capitalized-comments": [
+    //   "error",
+    //   "always",
+    //   {
+    //     "ignoreConsecutiveComments": true,
+    //     "ignorePattern": "pragma|ignored"
+    //   }
+    // ],
+    "eol-last": ["error", "always"],
+    "consistent-this": ["error", "self"],
+    "func-call-spacing": ["error", "never"],
+    "keyword-spacing": ["error"],
+    "id-blacklist": [
+      "error",
+      "any",
+      "Number",
+      "number",
+      "String",
+      "string",
+      "Boolean",
+      "boolean",
+      "Undefined",
+      "undefined",
+      "Symbol",
+      "symbol"
+    ],
+    "linebreak-style": ["error", "unix"],
+    "max-len": [
+      "warn",
+      {
+        "code": 100,
+        "ignoreUrls": true
+      }
+    ],
+    "no-lonely-if": "error",
+    "no-trailing-spaces": "error",
+    "no-whitespace-before-property": "error",
+    "no-shadow": "error",
+    "space-in-parens": ["error", "never"],
+    "space-infix-ops": "error",
+    "space-unary-ops": "error",
+    "spaced-comment": ["error", "always"],
+    "switch-colon-spacing": "error",
+    "arrow-body-style": ["error", "as-needed"],
+    "arrow-parens": ["error", "always"],
+    "arrow-spacing": "error",
+    "no-duplicate-imports": "error",
+    "no-var": "error",
+    "prefer-const": "error",
+    "sort-imports": [
+      "warn",
+      {
+        "ignoreCase": false,
+        "ignoreDeclarationSort": true,
+        "ignoreMemberSort": false,
+        "memberSyntaxSortOrder": ["none", "all", "multiple", "single"],
+        "allowSeparatedGroups": true
+      }
+    ],
+    "import/no-unresolved": "error",
+    "import/order": [
+      "error",
+      {
+        "groups": [
+          "builtin", // Built-in imports (come from NodeJS native) go first
+          "external", // <- External imports
+          "internal", // <- Absolute imports
+          ["sibling", "parent"], // <- Relative imports, the sibling and parent types they can be mingled together
+          "index", // <- Index imports
+          "unknown" // <- Unknown
+        ],
+        "newlines-between": "always",
+        "alphabetize": {
+          /* Sort in ascending order. Options: ["ignore", "asc", "desc"] */
+          "order": "asc",
+          /* Ignore case. Options: [true, false] */
+          "caseInsensitive": true
+        }
+      }
+    ],
+    "object-curly-spacing": ["error", "always"],
+    "lines-between-class-members": [
+      "error",
+      "always",
+      {
+        "exceptAfterSingleLine": true
+      }
+    ],
+    "quotes": [
+      "error",
+      "single",
+      {
+        "avoidEscape": true,
+        "allowTemplateLiterals": false
+      }
+    ]
+  },
+  "overrides": [
+    {
+      "files": ["**/*.ts"],
+      "parser": "@typescript-eslint/parser",
+      "parserOptions": {
+        "ecmaVersion": 2020,
+        "sourceType": "module",
+        "project": "./tsconfig.json"
+      },
+      "extends": [
+        "plugin:@typescript-eslint/eslint-recommended",
+        "plugin:@typescript-eslint/recommended",
+        "plugin:@typescript-eslint/recommended-requiring-type-checking",
+        "plugin:import/typescript"
+      ],
+      "plugins": ["@typescript-eslint"],
+      "rules": {
+        "@typescript-eslint/array-type": "off",
+        "semi": "off",
+        "@typescript-eslint/semi": ["error", "always"],
+        "@typescript-eslint/no-empty-function": "warn",
+        "@typescript-eslint/member-ordering": "error",
+        "@typescript-eslint/await-thenable": "error",
+        "@typescript-eslint/no-floating-promises": "error",
+        "@typescript-eslint/promise-function-async": "error",
+        "@typescript-eslint/no-misused-promises": "error",
+        "no-shadow": "off",
+        "@typescript-eslint/no-shadow": "error"
+      }
+    },
+    {
+      "files": ["**/*.js"],
+      "extends": "plugin:node/recommended",
+      "rules": {
+        "node/shebang": "off"
+      }
+    }
+  ]
+}