@@ -6,6 +6,7 @@ import type {
6
6
Selector ,
7
7
} from './sort-classes/types'
8
8
import type { SortingNodeWithDependencies } from '../utils/sort-nodes-by-dependencies'
9
+ import type { NewlinesBetweenOption } from '../types/common-options'
9
10
10
11
import {
11
12
buildCustomGroupsArrayJsonSchema ,
@@ -101,6 +102,11 @@ let defaultOptions: Required<SortClassesOptions[0]> = {
101
102
order : 'asc' ,
102
103
}
103
104
105
+ interface SortClassSortingNodes
106
+ extends SortingNodeWithDependencies < TSESTree . ClassElement > {
107
+ overloadSignaturesGroupId : number | null
108
+ }
109
+
104
110
export default createEslintRule < SortClassesOptions , MESSAGE_ID > ( {
105
111
create : context => ( {
106
112
ClassBody : node => {
@@ -287,8 +293,8 @@ export default createEslintRule<SortClassesOptions, MESSAGE_ID>({
287
293
return dependencies
288
294
}
289
295
let overloadSignatureGroups = getOverloadSignatureGroups ( node . body )
290
- let formattedNodes : SortingNodeWithDependencies [ ] [ ] = node . body . reduce (
291
- ( accumulator : SortingNodeWithDependencies [ ] [ ] , member ) => {
296
+ let formattedNodes : SortClassSortingNodes [ ] [ ] = node . body . reduce (
297
+ ( accumulator : SortClassSortingNodes [ ] [ ] , member ) => {
292
298
let name : string
293
299
let dependencies : string [ ] = [ ]
294
300
let { defineGroup, getGroup } = useGroups ( options )
@@ -553,26 +559,32 @@ export default createEslintRule<SortClassesOptions, MESSAGE_ID>({
553
559
* It is unclear what should be considered the size of an overload
554
560
* signature group. Take the size of the implementation by default.
555
561
*/
556
- let overloadSignatureGroupMember = overloadSignatureGroups
557
- . find ( overloadSignatures => overloadSignatures . includes ( member ) )
558
- ?. at ( - 1 )
562
+ let overloadSignatureGroupMemberIndex =
563
+ overloadSignatureGroups . findIndex ( overloadSignatures =>
564
+ overloadSignatures . includes ( member ) ,
565
+ )
566
+ let overloadSignatureGroupMember =
567
+ overloadSignatureGroups [ overloadSignatureGroupMemberIndex ] ?. at ( - 1 )
559
568
560
- let sortingNode : SortingNodeWithDependencies = {
569
+ let sortingNode : SortClassSortingNodes = {
561
570
dependencyName : getDependencyName ( {
562
571
nodeNameWithoutStartingHash : name . startsWith ( '#' )
563
572
? name . slice ( 1 )
564
573
: name ,
565
574
isStatic : modifiers . includes ( 'static' ) ,
566
575
isPrivateHash,
567
576
} ) ,
577
+ overloadSignaturesGroupId :
578
+ overloadSignatureGroupMemberIndex === - 1
579
+ ? null
580
+ : overloadSignatureGroupMemberIndex ,
568
581
size : overloadSignatureGroupMember
569
582
? rangeToDiff ( overloadSignatureGroupMember , sourceCode )
570
583
: rangeToDiff ( member , sourceCode ) ,
571
584
isEslintDisabled : isNodeEslintDisabled ( member , eslintDisabledLines ) ,
572
585
addSafetySemicolonWhenInline,
573
586
group : getGroup ( ) ,
574
587
node : member ,
575
-
576
588
dependencies,
577
589
name,
578
590
}
@@ -599,7 +611,7 @@ export default createEslintRule<SortClassesOptions, MESSAGE_ID>({
599
611
600
612
let sortNodesExcludingEslintDisabled = (
601
613
ignoreEslintDisabledNodes : boolean ,
602
- ) : SortingNodeWithDependencies [ ] =>
614
+ ) : SortClassSortingNodes [ ] =>
603
615
sortNodesByDependencies (
604
616
formattedNodes . flatMap ( nodes =>
605
617
sortNodesByGroups ( nodes , options , {
@@ -618,7 +630,20 @@ export default createEslintRule<SortClassesOptions, MESSAGE_ID>({
618
630
619
631
let nodes = formattedNodes . flat ( )
620
632
621
- reportAllErrors < MESSAGE_ID > ( {
633
+ reportAllErrors < MESSAGE_ID , SortClassSortingNodes > ( {
634
+ newlinesBetweenValueGetter : ( {
635
+ computedNewlinesBetween,
636
+ right,
637
+ left,
638
+ } ) : NewlinesBetweenOption => {
639
+ if (
640
+ left . overloadSignaturesGroupId !== null &&
641
+ left . overloadSignaturesGroupId === right . overloadSignaturesGroupId
642
+ ) {
643
+ return 'never'
644
+ }
645
+ return computedNewlinesBetween
646
+ } ,
622
647
availableMessageIds : {
623
648
missedSpacingBetweenMembers : 'missedSpacingBetweenClassMembers' ,
624
649
extraSpacingBetweenMembers : 'extraSpacingBetweenClassMembers' ,
0 commit comments