From c426329ec08df96a875826377157d5c3b83ee7e1 Mon Sep 17 00:00:00 2001 From: Ian VanSchooten Date: Mon, 24 Apr 2023 07:34:54 -0400 Subject: [PATCH] [Breaking] Remove importOrderGroupNamespaceSpecifiers option --- README.md | 9 ----- docs/MIGRATION.md | 1 + src/index.ts | 7 ---- src/preprocessors/preprocessor.ts | 2 - src/types.ts | 1 - .../get-all-comments-from-nodes.spec.ts | 1 - src/utils/__tests__/get-code-from-ast.spec.ts | 2 - .../get-sorted-nodes-by-import-order.spec.ts | 39 ------------------- src/utils/__tests__/get-sorted-nodes.spec.ts | 1 - .../merge-nodes-with-matching-flavors.spec.ts | 1 - .../remove-nodes-from-original-code.spec.ts | 1 - src/utils/get-sorted-nodes-by-import-order.ts | 7 +--- src/utils/get-sorted-nodes-group.ts | 31 ++------------- types/index.d.ts | 7 ---- 14 files changed, 6 insertions(+), 104 deletions(-) diff --git a/README.md b/README.md index dde1018..7f6644b 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,6 @@ Since then more critical features & fixes have been added. As a result, this rep - [Options](#options) - [`importOrder`](#importorder) - [`importOrderSortSpecifiers`](#importordersortspecifiers) - - [`importOrderGroupNamespaceSpecifiers`](#importordergroupnamespacespecifiers) - [`importOrderMergeDuplicateImports`](#importordermergeduplicateimports) - [`importOrderCombineTypeAndValueImports`](#importordercombinetypeandvalueimports) - [`importOrderParserPlugins`](#importorderparserplugins) @@ -239,14 +238,6 @@ After: import Default, {charlie, delta as echo, type Alpha, type Bravo} from 'source'; ``` -#### `importOrderGroupNamespaceSpecifiers` - -**type**: `boolean` - -**default value:** `false` - -A boolean value to enable or disable sorting the namespace specifiers to the top of the import group. - #### `importOrderMergeDuplicateImports` **type**: `boolean` diff --git a/docs/MIGRATION.md b/docs/MIGRATION.md index 3137e2e..5c7bbb0 100644 --- a/docs/MIGRATION.md +++ b/docs/MIGRATION.md @@ -7,6 +7,7 @@ - The `importOrderBuiltinModulesToTop` option has been removed, and node.js built in modules are always sorted to the top. - The `importOrderSeparation` option has been removed. Use empty quotes in your `importOrder` to control the placement of blank lines. - The `importOrderCaseInsensitive` option has been removed, and imports will always be sorted case-insensitive. +- The `importOrderGroupNamespaceSpecifiers` option has been removed. #### `importOrderSeparation` removed diff --git a/src/index.ts b/src/index.ts index c669c84..d8ac92a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -37,13 +37,6 @@ export const options: Record< default: [{ value: ['typescript', 'jsx'] }], description: 'Provide a list of plugins for special syntax', }, - importOrderGroupNamespaceSpecifiers: { - type: 'boolean', - category: 'Global', - default: false, - description: - 'Should namespace specifiers be grouped at the top of their group?', - }, importOrderSortSpecifiers: { type: 'boolean', category: 'Global', diff --git a/src/preprocessors/preprocessor.ts b/src/preprocessors/preprocessor.ts index 6b8f324..a4e6898 100644 --- a/src/preprocessors/preprocessor.ts +++ b/src/preprocessors/preprocessor.ts @@ -12,7 +12,6 @@ export function preprocessor(code: string, options: PrettierOptions): string { const { importOrderParserPlugins, importOrder, - importOrderGroupNamespaceSpecifiers, importOrderMergeDuplicateImports, importOrderSortSpecifiers, } = options; @@ -67,7 +66,6 @@ export function preprocessor(code: string, options: PrettierOptions): string { const nodesToOutput = getSortedNodes(allOriginalImportNodes, { importOrder, - importOrderGroupNamespaceSpecifiers, importOrderMergeDuplicateImports, importOrderCombineTypeAndValueImports, importOrderSortSpecifiers, diff --git a/src/types.ts b/src/types.ts index f92878e..bb537bc 100644 --- a/src/types.ts +++ b/src/types.ts @@ -35,7 +35,6 @@ export type GetSortedNodes = ( options: Pick< PrettierOptions, | 'importOrder' - | 'importOrderGroupNamespaceSpecifiers' | 'importOrderMergeDuplicateImports' | 'importOrderCombineTypeAndValueImports' | 'importOrderSortSpecifiers' diff --git a/src/utils/__tests__/get-all-comments-from-nodes.spec.ts b/src/utils/__tests__/get-all-comments-from-nodes.spec.ts index 5094196..a907c08 100644 --- a/src/utils/__tests__/get-all-comments-from-nodes.spec.ts +++ b/src/utils/__tests__/get-all-comments-from-nodes.spec.ts @@ -11,7 +11,6 @@ const getSortedImportNodes = (code: string, options?: ParserOptions) => { return getSortedNodes(importNodes, { importOrder: [], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: false, diff --git a/src/utils/__tests__/get-code-from-ast.spec.ts b/src/utils/__tests__/get-code-from-ast.spec.ts index 99c3cdd..2a5f415 100644 --- a/src/utils/__tests__/get-code-from-ast.spec.ts +++ b/src/utils/__tests__/get-code-from-ast.spec.ts @@ -18,7 +18,6 @@ import a from 'a'; const importNodes = getImportNodes(code); const sortedNodes = getSortedNodes(importNodes, { importOrder: [], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: false, @@ -57,7 +56,6 @@ import type {See} from 'c'; const importNodes = getImportNodes(code, { plugins: ['typescript'] }); const sortedNodes = getSortedNodes(importNodes, { importOrder: [], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: true, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: false, diff --git a/src/utils/__tests__/get-sorted-nodes-by-import-order.spec.ts b/src/utils/__tests__/get-sorted-nodes-by-import-order.spec.ts index 84b35c7..ccbc95a 100644 --- a/src/utils/__tests__/get-sorted-nodes-by-import-order.spec.ts +++ b/src/utils/__tests__/get-sorted-nodes-by-import-order.spec.ts @@ -29,7 +29,6 @@ test('it returns all sorted nodes', () => { const result = getImportNodes(code); const sorted = getSortedNodesByImportOrder(result, { importOrder: ['^[./]'], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: false, @@ -81,7 +80,6 @@ test('it returns all sorted nodes case-insensitive', () => { const result = getImportNodes(code); const sorted = getSortedNodesByImportOrder(result, { importOrder: ['^[./]'], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: false, @@ -133,7 +131,6 @@ test('it returns all sorted nodes with sort order', () => { const result = getImportNodes(code); const sorted = getSortedNodesByImportOrder(result, { importOrder: ['^a$', '^t$', '^k$', '^B', '^[./]'], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: false, @@ -184,7 +181,6 @@ test('it returns all sorted nodes with sort order case-insensitive', () => { const result = getImportNodes(code); const sorted = getSortedNodesByImportOrder(result, { importOrder: ['^a$', '^t$', '^k$', '^B', '^[./]'], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: false, @@ -235,7 +231,6 @@ test('it returns all sorted import nodes with sorted import specifiers', () => { const result = getImportNodes(code); const sorted = getSortedNodesByImportOrder(result, { importOrder: ['^a$', '^t$', '^k$', '^B', '^[./]'], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: true, @@ -286,7 +281,6 @@ test('it returns all sorted import nodes with sorted import specifiers with case const result = getImportNodes(code); const sorted = getSortedNodesByImportOrder(result, { importOrder: ['^a$', '^t$', '^k$', '^B', '^[./]'], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: true, @@ -333,40 +327,10 @@ test('it returns all sorted import nodes with sorted import specifiers with case ]); }); -test('it returns all sorted nodes with namespace specifiers at the top (under builtins)', () => { - const result = getImportNodes(code); - const sorted = getSortedNodesByImportOrder(result, { - importOrder: ['^[./]'], - importOrderGroupNamespaceSpecifiers: true, - importOrderMergeDuplicateImports: false, - importOrderCombineTypeAndValueImports: false, - importOrderSortSpecifiers: false, - }) as ImportDeclaration[]; - - expect(getSortedNodesNamesAndNewlines(sorted)).toEqual([ - 'node:fs/promises', - 'node:url', - 'path', - 'a', - 'x', - 'Ba', - 'BY', - 'c', - 'g', - 'k', - 't', - 'Xa', - 'XY', - 'z', - './local', - ]); -}); - test('it returns all sorted nodes with builtin specifiers at the top', () => { const result = getImportNodes(code); const sorted = getSortedNodesByImportOrder(result, { importOrder: ['^[./]'], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: false, @@ -395,7 +359,6 @@ test('it returns all sorted nodes with custom third party modules and builtins a const result = getImportNodes(code); const sorted = getSortedNodesByImportOrder(result, { importOrder: ['^a$', '', '^t$', '^k$', '^[./]'], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: false, @@ -430,7 +393,6 @@ test('it returns all sorted nodes with custom separation', () => { '^k$', '^[./]', ], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: false, @@ -468,7 +430,6 @@ test('it does not add multiple custom import separators', () => { '^k$', '^[./]', ], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: false, diff --git a/src/utils/__tests__/get-sorted-nodes.spec.ts b/src/utils/__tests__/get-sorted-nodes.spec.ts index 4d1bef5..e49f285 100644 --- a/src/utils/__tests__/get-sorted-nodes.spec.ts +++ b/src/utils/__tests__/get-sorted-nodes.spec.ts @@ -30,7 +30,6 @@ test('it returns all sorted nodes, preserving the order side effect nodes', () = const result = getImportNodes(code); const sorted = getSortedNodes(result, { importOrder: [], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: false, diff --git a/src/utils/__tests__/merge-nodes-with-matching-flavors.spec.ts b/src/utils/__tests__/merge-nodes-with-matching-flavors.spec.ts index 6a8e618..116b2e8 100644 --- a/src/utils/__tests__/merge-nodes-with-matching-flavors.spec.ts +++ b/src/utils/__tests__/merge-nodes-with-matching-flavors.spec.ts @@ -7,7 +7,6 @@ import { getSortedNodes } from '../get-sorted-nodes'; const defaultOptions = { importOrder: [''], // Separate side-effect and ignored chunks, for easier test readability - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: true, diff --git a/src/utils/__tests__/remove-nodes-from-original-code.spec.ts b/src/utils/__tests__/remove-nodes-from-original-code.spec.ts index 62dab3c..486f441 100644 --- a/src/utils/__tests__/remove-nodes-from-original-code.spec.ts +++ b/src/utils/__tests__/remove-nodes-from-original-code.spec.ts @@ -24,7 +24,6 @@ test('it should remove nodes from the original code', () => { const importNodes = getImportNodes(code); const sortedNodes = getSortedNodes(importNodes, { importOrder: [], - importOrderGroupNamespaceSpecifiers: false, importOrderMergeDuplicateImports: false, importOrderCombineTypeAndValueImports: false, importOrderSortSpecifiers: false, diff --git a/src/utils/get-sorted-nodes-by-import-order.ts b/src/utils/get-sorted-nodes-by-import-order.ts index 8c9609c..90ee35f 100644 --- a/src/utils/get-sorted-nodes-by-import-order.ts +++ b/src/utils/get-sorted-nodes-by-import-order.ts @@ -22,8 +22,7 @@ export const getSortedNodesByImportOrder: GetSortedNodes = (nodes, options) => { naturalSort.insensitive = true; let { importOrder } = options; - const { importOrderSortSpecifiers, importOrderGroupNamespaceSpecifiers } = - options; + const { importOrderSortSpecifiers } = options; const originalNodes = nodes.map(clone); const finalNodes: ImportOrLine[] = []; @@ -82,9 +81,7 @@ export const getSortedNodesByImportOrder: GetSortedNodes = (nodes, options) => { if (groupNodes.length === 0) continue; - const sortedInsideGroup = getSortedNodesGroup(groupNodes, { - importOrderGroupNamespaceSpecifiers, - }); + const sortedInsideGroup = getSortedNodesGroup(groupNodes); // Sort the import specifiers if (importOrderSortSpecifiers) { diff --git a/src/utils/get-sorted-nodes-group.ts b/src/utils/get-sorted-nodes-group.ts index 8995133..d54e6ef 100644 --- a/src/utils/get-sorted-nodes-group.ts +++ b/src/utils/get-sorted-nodes-group.ts @@ -1,32 +1,7 @@ -import { Import, ImportDeclaration } from '@babel/types'; +import { ImportDeclaration } from '@babel/types'; import { naturalSort } from '../natural-sort'; -import { PrettierOptions } from '../types'; -export const getSortedNodesGroup = ( - imports: ImportDeclaration[], - options: Pick, -) => { - return imports.sort((a, b) => { - if (options.importOrderGroupNamespaceSpecifiers) { - const diff = namespaceSpecifierSort(a, b); - if (diff !== 0) return diff; - } - - return naturalSort(a.source.value, b.source.value); - }); +export const getSortedNodesGroup = (imports: ImportDeclaration[]) => { + return imports.sort((a, b) => naturalSort(a.source.value, b.source.value)); }; - -function namespaceSpecifierSort(a: ImportDeclaration, b: ImportDeclaration) { - const aFirstSpecifier = a.specifiers.find( - (s) => s.type === 'ImportNamespaceSpecifier', - ) - ? 1 - : 0; - const bFirstSpecifier = b.specifiers.find( - (s) => s.type === 'ImportNamespaceSpecifier', - ) - ? 1 - : 0; - return bFirstSpecifier - aFirstSpecifier; -} diff --git a/types/index.d.ts b/types/index.d.ts index 43421da..b2466d9 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -38,13 +38,6 @@ export interface PluginConfig { */ importOrder?: string[]; - /** - * A boolean value to enable or disable sorting the namespace specifiers to the top of the import group. - * - * @default false - */ - importOrderGroupNamespaceSpecifiers?: boolean; - /** * When `true`, multiple import statements from the same module will be combined into a single import. *