From fa404fff84a339aad30aecf03de027d3d0f9ed5b Mon Sep 17 00:00:00 2001 From: Yury Bondarenko Date: Sat, 20 May 2023 09:56:35 +0200 Subject: [PATCH] ESLint: enforce import formatting Mainly to reduce merge conflict noise - Order by origin & alphabetically - Imports should be at the top of the file - Newline between imports & the rest of the file - Disallow duplicate imports - Enforce single-line when only importing one object - Enforce multi-line when importing two or more --- .eslintrc.json | 18 +++++++++++++++++- package.json | 2 ++ yarn.lock | 10 ++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index f7a768afcd..70a2a657d2 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -9,7 +9,9 @@ "unused-imports", "eslint-plugin-lodash", "eslint-plugin-jsonc", - "eslint-plugin-rxjs" + "eslint-plugin-rxjs", + "eslint-plugin-simple-import-sort", + "eslint-plugin-import-newlines" ], "overrides": [ { @@ -210,9 +212,23 @@ "deprecation/deprecation": "warn", + "simple-import-sort/imports": "error", + "simple-import-sort/exports": "error", "import/order": "off", + "import/first": "error", + "import/newline-after-import": "error", + "import/no-duplicates": "error", "import/no-deprecated": "warn", "import/no-namespace": "error", + "import-newlines/enforce": [ + "error", + { + "items": 1, + "semi": true, + "forceSingleLine": true + } + ], + "unused-imports/no-unused-imports": "error", "lodash/import-scope": [ "error", diff --git a/package.json b/package.json index 8069e80c41..6bc80cedb1 100644 --- a/package.json +++ b/package.json @@ -169,10 +169,12 @@ "eslint": "^8.39.0", "eslint-plugin-deprecation": "^1.4.1", "eslint-plugin-import": "^2.27.5", + "eslint-plugin-import-newlines": "^1.3.1", "eslint-plugin-jsdoc": "^39.6.4", "eslint-plugin-jsonc": "^2.6.0", "eslint-plugin-lodash": "^7.4.0", "eslint-plugin-rxjs": "^5.0.3", + "eslint-plugin-simple-import-sort": "^10.0.0", "eslint-plugin-unused-imports": "^2.0.0", "express-static-gzip": "^2.1.7", "jasmine-core": "^3.8.0", diff --git a/yarn.lock b/yarn.lock index b90d981123..d62093aa4d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5296,6 +5296,11 @@ eslint-plugin-deprecation@^1.4.1: tslib "^2.3.1" tsutils "^3.21.0" +eslint-plugin-import-newlines@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import-newlines/-/eslint-plugin-import-newlines-1.3.1.tgz#e21705667778e8134382b50079fbb2c8d3a2fcde" + integrity sha512-7vyhwliGm+CTwteRw2ym+IO9OaksGYmSt63elPPBM0QJ3zwRwMKtgHOSHVtdHlrSERRTVCsWtMO8dDdAdmHMXg== + eslint-plugin-import@^2.27.5: version "2.27.5" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" @@ -5361,6 +5366,11 @@ eslint-plugin-rxjs@^5.0.3: tsutils "^3.0.0" tsutils-etc "^1.4.1" +eslint-plugin-simple-import-sort@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz#cc4ceaa81ba73252427062705b64321946f61351" + integrity sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw== + eslint-plugin-unused-imports@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz"