From 6602684bcd31c7528985a3b64a2c1393e7b1ef06 Mon Sep 17 00:00:00 2001 From: Alexey Ryabov Date: Mon, 4 Dec 2023 11:52:27 +0300 Subject: [PATCH] feat(eslint): change import order Move type imports to the top and into separate group. --- eslint/rules/import.js | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/eslint/rules/import.js b/eslint/rules/import.js index 7784fd1..abe3494 100644 --- a/eslint/rules/import.js +++ b/eslint/rules/import.js @@ -1,3 +1,23 @@ +// https://github.com/lydell/eslint-plugin-simple-import-sort#custom-grouping +const baseImportOrder = [ + // Side effect imports. + ['^\\u0000'], + // Node.js builtins prefixed with `node:`. + ['^node:'], + // Packages. + ['^@?\\w'], + // 1. Special aliases (e.g. `@/`, `~/`). + // 2. Relative imports. + ['^[@~^$#!]/', '^\\.'], +]; + +/** Type imports order */ +const typeImportOrder = baseImportOrder.flatMap(group => + group.map(item => `${item}.+\\u0000$`), +); + +const importOrder = [typeImportOrder, ...baseImportOrder]; + module.exports = { /** * Enforce that named type-only specifiers only ever written as part of a @@ -67,20 +87,5 @@ module.exports = { */ 'import/order': 'off', 'simple-import-sort/exports': 'error', - 'simple-import-sort/imports': [ - 'error', - { - groups: [ - // Side effect imports. - ['^\\u0000'], - // Node.js builtins prefixed with `node:`. - ['^node:'], - // Packages. - ['^@?\\w'], - // 1. Absolute imports and other imports such as Vue-style `@/foo`. - // 2. Relative imports. - ['^', '^\\.'], - ], - }, - ], + 'simple-import-sort/imports': ['error', { groups: importOrder }], };