1
- import { AST_NODE_TYPES , ESLintUtils , type TSESTree , type TSESLint } from '@typescript-eslint/utils'
1
+ import { AST_NODE_TYPES , ESLintUtils , type TSESTree } from '@typescript-eslint/utils'
2
2
3
- import { compare } from '../utils/compare.js'
4
- import { computeGroup , isSideEffectImport } from '../utils/compute-group.js'
5
- import { getCommentsBefore } from '../utils/get-comment.js'
3
+ import { computeGroup } from '../utils/compute-group.js'
6
4
import { getEslintDisabledLines } from '../utils/get-eslint-disabled-lines.js'
7
5
import { getGroupNumber } from '../utils/get-group-number.js'
8
- import { getLinesBetween } from '../utils/get-lines-between.js'
9
6
import { getNewlineErrors } from '../utils/get-newline-errors.js'
10
- import { getNodeRange } from '../utils/get-node-range.js'
11
7
import { isNodeEslintDisabled } from '../utils/is-node-eslint-disabled.js'
12
8
import { makeFixes } from '../utils/make-fixes.js'
13
9
import { makeNewlineFixes } from '../utils/make-newline-fixes.js'
14
10
import { pairwise } from '../utils/pairwise.js'
15
11
import { rangeToDiff } from '../utils/range-to-diff.js'
16
12
import { sortNodesByGroups } from '../utils/sort-nodes-by-groups.js'
17
- import { sortNodes } from '../utils/sort-nodes.js'
18
13
import type { ImportDeclarationNode , Options , SortingNode } from '../utils/types.js'
19
14
20
15
export const IMPORT_GROUPS = [
@@ -116,15 +111,6 @@ export default createRule<unknown[], MessageId>({
116
111
} ) . length > 0
117
112
)
118
113
}
119
- //
120
- // let hasContentBetweenNodes = (left: SortingNode, right: SortingNode): boolean =>
121
- // sourceCode.getTokensBetween(
122
- // left.node,
123
- // getCommentBefore(right.node, sourceCode) ?? right.node,
124
- // {
125
- // includeComments: true,
126
- // },
127
- // ).length > 0
128
114
129
115
let formattedNodes : SortingNode [ ] [ ] = [ [ ] ]
130
116
@@ -181,8 +167,6 @@ export default createRule<unknown[], MessageId>({
181
167
nodes : nodeList ,
182
168
sortedNodes,
183
169
sourceCode,
184
- //
185
- // options,
186
170
} ) ,
187
171
...makeNewlineFixes ( {
188
172
fixer,
@@ -202,166 +186,9 @@ export default createRule<unknown[], MessageId>({
202
186
messageId : message ,
203
187
} )
204
188
}
205
-
206
- //
207
- // let numberOfEmptyLinesBetween = getLinesBetween(sourceCode, left, right)
208
- //
209
- // if (
210
- // !(
211
- // isSideEffectImport(left.node, sourceCode) &&
212
- // isSideEffectImport(right.node, sourceCode)
213
- // ) &&
214
- // !hasContentBetweenNodes(left, right) &&
215
- // (leftNumber > rightNumber ||
216
- // (leftNumber === rightNumber && compare(left, right, options) > 0))
217
- // ) {
218
- // context.report({
219
- // messageId: 'out-of-order',
220
- // data: {
221
- // left: left.name,
222
- // right: right.name,
223
- // },
224
- // node: right.node,
225
- // fix: (fixer) => fix(fixer, nodeList, sourceCode, options),
226
- // })
227
- // }
228
- //
229
- // if (options.newlinesBetween === 'never' && numberOfEmptyLinesBetween > 0) {
230
- // context.report({
231
- // messageId: 'extra-newline',
232
- // data: {
233
- // left: left.name,
234
- // right: right.name,
235
- // },
236
- // node: right.node,
237
- // fix: (fixer) => fix(fixer, nodeList, sourceCode, options),
238
- // })
239
- // }
240
- //
241
- // if (options.newlinesBetween === 'always') {
242
- // if (leftNumber < rightNumber && numberOfEmptyLinesBetween === 0) {
243
- // context.report({
244
- // messageId: 'needs-newline',
245
- // data: {
246
- // left: left.name,
247
- // right: right.name,
248
- // },
249
- // node: right.node,
250
- // fix: (fixer) => fix(fixer, nodeList, sourceCode, options),
251
- // })
252
- // } else if (
253
- // numberOfEmptyLinesBetween > 1 ||
254
- // (leftNumber === rightNumber && numberOfEmptyLinesBetween > 0)
255
- // ) {
256
- // context.report({
257
- // messageId: 'extra-newline',
258
- // data: {
259
- // left: left.name,
260
- // right: right.name,
261
- // },
262
- // node: right.node,
263
- // fix: (fixer) => fix(fixer, nodeList, sourceCode, options),
264
- // })
265
- // }
266
- // }
267
189
} )
268
190
}
269
191
} ,
270
192
}
271
193
} ,
272
194
} )
273
-
274
- function fix (
275
- fixer : TSESLint . RuleFixer ,
276
- nodesToFix : SortingNode [ ] ,
277
- sourceCode : TSESLint . SourceCode ,
278
- options : Options ,
279
- ) : TSESLint . RuleFix [ ] {
280
- let fixes : TSESLint . RuleFix [ ] = [ ]
281
- let grouped : Record < string , SortingNode [ ] > = { }
282
-
283
- for ( let node of nodesToFix ) {
284
- let groupNumber = getGroupNumber ( IMPORT_GROUPS , node )
285
-
286
- grouped [ groupNumber ] =
287
- groupNumber in grouped ? sortNodes ( [ ...grouped [ groupNumber ] , node ] , options ) : [ node ]
288
- }
289
-
290
- let formatted = Object . keys ( grouped )
291
- . sort ( ( a , b ) => Number ( a ) - Number ( b ) )
292
- . reduce (
293
- ( accumulator : SortingNode [ ] , group : string ) => [ ...accumulator , ...grouped [ group ] ] ,
294
- [ ] ,
295
- )
296
-
297
- for ( let max = formatted . length , index = 0 ; index < max ; index ++ ) {
298
- let node = formatted . at ( index ) !
299
-
300
- fixes . push (
301
- fixer . replaceTextRange (
302
- getNodeRange ( nodesToFix . at ( index ) ! . node , sourceCode ) ,
303
- sourceCode . text . slice ( ...getNodeRange ( node . node , sourceCode ) ) ,
304
- ) ,
305
- )
306
-
307
- if ( options . newlinesBetween !== 'ignore' ) {
308
- let nextNode = formatted . at ( index + 1 )
309
-
310
- if ( nextNode ) {
311
- let linesBetweenImports = getLinesBetween (
312
- sourceCode ,
313
- nodesToFix . at ( index ) ! ,
314
- nodesToFix . at ( index + 1 ) ! ,
315
- )
316
-
317
- if (
318
- ( options . newlinesBetween === 'always' &&
319
- getGroupNumber ( IMPORT_GROUPS , node ) ===
320
- getGroupNumber ( IMPORT_GROUPS , nextNode ) &&
321
- linesBetweenImports !== 0 ) ||
322
- ( options . newlinesBetween === 'never' && linesBetweenImports > 0 )
323
- ) {
324
- fixes . push (
325
- fixer . removeRange ( [
326
- getNodeRange ( nodesToFix . at ( index ) ! . node , sourceCode ) . at ( 1 ) ! ,
327
- getNodeRange ( nodesToFix . at ( index + 1 ) ! . node , sourceCode ) . at ( 0 ) ! - 1 ,
328
- ] ) ,
329
- )
330
- }
331
-
332
- if (
333
- options . newlinesBetween === 'always' &&
334
- getGroupNumber ( IMPORT_GROUPS , node ) !==
335
- getGroupNumber ( IMPORT_GROUPS , nextNode ) &&
336
- linesBetweenImports > 1
337
- ) {
338
- fixes . push (
339
- fixer . replaceTextRange (
340
- [
341
- getNodeRange ( nodesToFix . at ( index ) ! . node , sourceCode ) . at ( 1 ) ! ,
342
- getNodeRange ( nodesToFix . at ( index + 1 ) ! . node , sourceCode ) . at ( 0 ) ! - 1 ,
343
- ] ,
344
- '\n' ,
345
- ) ,
346
- )
347
- }
348
-
349
- if (
350
- options . newlinesBetween === 'always' &&
351
- getGroupNumber ( IMPORT_GROUPS , node ) !==
352
- getGroupNumber ( IMPORT_GROUPS , nextNode ) &&
353
- linesBetweenImports === 0
354
- ) {
355
- fixes . push (
356
- fixer . insertTextAfterRange (
357
- getNodeRange ( nodesToFix . at ( index ) ! . node , sourceCode ) ,
358
- '\n' ,
359
- ) ,
360
- )
361
- }
362
- }
363
- }
364
- }
365
-
366
- return fixes
367
- }
0 commit comments