Skip to content

Commit c510ce7

Browse files
committed
refactor: improves Join to handle - natively
1 parent 9a189f2 commit c510ce7

6 files changed

+95
-151
lines changed

rules/sort-classes.types.ts

+56-76
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { JSONSchema4 } from '@typescript-eslint/utils/json-schema'
22

3-
import type { WithDashSuffixOrEmpty, Join } from '../typings'
3+
import type { Join } from '../typings'
44

55
import {
66
buildCustomGroupModifiersJsonSchema,
@@ -36,42 +36,6 @@ export type SingleCustomGroup =
3636
| BaseSingleCustomGroup<ConstructorSelector>
3737
| AdvancedSingleCustomGroup<MethodSelector>
3838

39-
export type NonDeclarePropertyGroup = Join<
40-
[
41-
PublicOrProtectedOrPrivateModifierPrefix,
42-
StaticOrAbstractModifierPrefix,
43-
OverrideModifierPrefix,
44-
ReadonlyModifierPrefix,
45-
DecoratedModifierPrefix,
46-
OptionalModifierPrefix,
47-
PropertySelector,
48-
]
49-
>
50-
51-
export type FunctionPropertyGroup = Join<
52-
[
53-
PublicOrProtectedOrPrivateModifierPrefix,
54-
StaticModifierPrefix,
55-
OverrideModifierPrefix,
56-
ReadonlyModifierPrefix,
57-
DecoratedModifierPrefix,
58-
AsyncModifierPrefix,
59-
FunctionPropertySelector,
60-
]
61-
>
62-
63-
export type MethodGroup = Join<
64-
[
65-
PublicOrProtectedOrPrivateModifierPrefix,
66-
StaticOrAbstractModifierPrefix,
67-
OverrideModifierPrefix,
68-
DecoratedModifierPrefix,
69-
AsyncModifierPrefix,
70-
OptionalModifierPrefix,
71-
MethodSelector,
72-
]
73-
>
74-
7539
export type Selector =
7640
| AccessorPropertySelector
7741
| FunctionPropertySelector
@@ -83,24 +47,27 @@ export type Selector =
8347
| PropertySelector
8448
| MethodSelector
8549

86-
export type DeclarePropertyGroup = Join<
50+
export type NonDeclarePropertyGroup = Join<
8751
[
88-
DeclareModifierPrefix,
89-
PublicOrProtectedOrPrivateModifierPrefix,
90-
StaticOrAbstractModifierPrefix,
91-
ReadonlyModifierPrefix,
92-
OptionalModifierPrefix,
52+
PublicOrProtectedOrPrivateModifier,
53+
StaticOrAbstractModifier,
54+
OverrideModifier,
55+
ReadonlyModifier,
56+
DecoratedModifier,
57+
OptionalModifier,
9358
PropertySelector,
9459
]
9560
>
9661

97-
export type GetMethodOrSetMethodGroup = Join<
62+
export type FunctionPropertyGroup = Join<
9863
[
99-
PublicOrProtectedOrPrivateModifierPrefix,
100-
StaticOrAbstractModifierPrefix,
101-
OverrideModifierPrefix,
102-
DecoratedModifierPrefix,
103-
GetMethodOrSetMethodSelector,
64+
PublicOrProtectedOrPrivateModifier,
65+
StaticModifier,
66+
OverrideModifier,
67+
ReadonlyModifier,
68+
DecoratedModifier,
69+
AsyncModifier,
70+
FunctionPropertySelector,
10471
]
10572
>
10673

@@ -115,22 +82,55 @@ export type Modifier =
11582
| StaticModifier
11683
| AsyncModifier
11784

85+
export type MethodGroup = Join<
86+
[
87+
PublicOrProtectedOrPrivateModifier,
88+
StaticOrAbstractModifier,
89+
OverrideModifier,
90+
DecoratedModifier,
91+
AsyncModifier,
92+
OptionalModifier,
93+
MethodSelector,
94+
]
95+
>
96+
97+
export type DeclarePropertyGroup = Join<
98+
[
99+
DeclareModifier,
100+
PublicOrProtectedOrPrivateModifier,
101+
StaticOrAbstractModifier,
102+
ReadonlyModifier,
103+
OptionalModifier,
104+
PropertySelector,
105+
]
106+
>
107+
108+
export type GetMethodOrSetMethodGroup = Join<
109+
[
110+
PublicOrProtectedOrPrivateModifier,
111+
StaticOrAbstractModifier,
112+
OverrideModifier,
113+
DecoratedModifier,
114+
GetMethodOrSetMethodSelector,
115+
]
116+
>
117+
118118
export type AccessorPropertyGroup = Join<
119119
[
120-
PublicOrProtectedOrPrivateModifierPrefix,
121-
StaticOrAbstractModifierPrefix,
122-
OverrideModifierPrefix,
123-
DecoratedModifierPrefix,
120+
PublicOrProtectedOrPrivateModifier,
121+
StaticOrAbstractModifier,
122+
OverrideModifier,
123+
DecoratedModifier,
124124
AccessorPropertySelector,
125125
]
126126
>
127127

128128
export type IndexSignatureGroup = Join<
129-
[StaticModifierPrefix, ReadonlyModifierPrefix, IndexSignatureSelector]
129+
[StaticModifier, ReadonlyModifier, IndexSignatureSelector]
130130
>
131131

132132
export type ConstructorGroup = Join<
133-
[PublicOrProtectedOrPrivateModifierPrefix, ConstructorSelector]
133+
[PublicOrProtectedOrPrivateModifier, ConstructorSelector]
134134
>
135135

136136
export interface AnyOfCustomGroup {
@@ -221,10 +221,6 @@ type AdvancedSingleCustomGroup<T extends Selector> = {
221221
elementNamePattern?: string
222222
} & BaseSingleCustomGroup<T>
223223

224-
type PublicOrProtectedOrPrivateModifierPrefix = WithDashSuffixOrEmpty<
225-
ProtectedModifier | PrivateModifier | PublicModifier
226-
>
227-
228224
interface BaseSingleCustomGroup<T extends Selector> {
229225
modifiers?: AllowedModifiersPerSelector[T][]
230226
selector?: T
@@ -235,25 +231,9 @@ type PublicOrProtectedOrPrivateModifier =
235231
| PrivateModifier
236232
| PublicModifier
237233

238-
type StaticOrAbstractModifierPrefix = WithDashSuffixOrEmpty<
239-
AbstractModifier | StaticModifier
240-
>
241-
242234
type GetMethodOrSetMethodSelector = GetMethodSelector | SetMethodSelector
243235

244-
type DecoratedModifierPrefix = WithDashSuffixOrEmpty<DecoratedModifier>
245-
246-
type OverrideModifierPrefix = WithDashSuffixOrEmpty<OverrideModifier>
247-
248-
type OptionalModifierPrefix = WithDashSuffixOrEmpty<OptionalModifier>
249-
250-
type ReadonlyModifierPrefix = WithDashSuffixOrEmpty<ReadonlyModifier>
251-
252-
type DeclareModifierPrefix = WithDashSuffixOrEmpty<DeclareModifier>
253-
254-
type StaticModifierPrefix = WithDashSuffixOrEmpty<StaticModifier>
255-
256-
type AsyncModifierPrefix = WithDashSuffixOrEmpty<AsyncModifier>
236+
type StaticOrAbstractModifier = AbstractModifier | StaticModifier
257237

258238
type FunctionPropertySelector = 'function-property'
259239

rules/sort-modules.types.ts

+14-43
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { JSONSchema4 } from '@typescript-eslint/utils/json-schema'
22

3-
import type { WithDashSuffixOrEmpty, Join } from '../typings'
3+
import type { Join } from '../typings'
44

55
import {
66
buildCustomGroupModifiersJsonSchema,
@@ -94,56 +94,33 @@ type Group =
9494
| 'unknown'
9595
| string
9696

97+
interface BaseSingleCustomGroup<T extends Selector> {
98+
modifiers?: AllowedModifiersPerSelector[T][]
99+
selector?: T
100+
}
101+
97102
type NonDefaultClassGroup = Join<
98-
[
99-
ExportModifierPrefix,
100-
DeclareModifierPrefix,
101-
DecoratedModifierPrefix,
102-
ClassSelector,
103-
]
103+
[ExportModifier, DeclareModifier, DecoratedModifier, ClassSelector]
104104
>
105105

106106
type DefaultFunctionGroup = Join<
107-
[
108-
ExportModifierPrefix,
109-
DefaultModifierPrefix,
110-
AsyncModifierPrefix,
111-
FunctionSelector,
112-
]
107+
[ExportModifier, DefaultModifier, AsyncModifier, FunctionSelector]
113108
>
114109

115110
type DefaultClassGroup = Join<
116-
[
117-
ExportModifierPrefix,
118-
DefaultModifierPrefix,
119-
DecoratedModifierPrefix,
120-
ClassSelector,
121-
]
111+
[ExportModifier, DefaultModifier, DecoratedModifier, ClassSelector]
122112
>
123113

124-
interface BaseSingleCustomGroup<T extends Selector> {
125-
modifiers?: AllowedModifiersPerSelector[T][]
126-
selector?: T
127-
}
128-
129114
type NonDefaultInterfaceGroup = Join<
130-
[ExportModifierPrefix, DeclareModifierPrefix, InterfaceSelector]
115+
[ExportModifier, DeclareModifier, InterfaceSelector]
131116
>
132117

133118
type NonDefaultFunctionGroup = Join<
134-
[ExportModifierPrefix, DeclareModifierPrefix, FunctionSelector]
119+
[ExportModifier, DeclareModifier, FunctionSelector]
135120
>
136121

137122
type DefaultInterfaceGroup = Join<
138-
[ExportModifierPrefix, DefaultModifierPrefix, InterfaceSelector]
139-
>
140-
141-
type TypeGroup = Join<
142-
[ExportModifierPrefix, DeclareModifierPrefix, TypeSelector]
143-
>
144-
145-
type EnumGroup = Join<
146-
[ExportModifierPrefix, DeclareModifierPrefix, EnumSelector]
123+
[ExportModifier, DefaultModifier, InterfaceSelector]
147124
>
148125

149126
interface DecoratorNamePatternFilterCustomGroup {
@@ -154,15 +131,9 @@ interface ElementNamePatternFilterCustomGroup {
154131
elementNamePattern?: string
155132
}
156133

157-
type DecoratedModifierPrefix = WithDashSuffixOrEmpty<DecoratedModifier>
158-
159-
type DeclareModifierPrefix = WithDashSuffixOrEmpty<DeclareModifier>
160-
161-
type DefaultModifierPrefix = WithDashSuffixOrEmpty<DefaultModifier>
162-
163-
type ExportModifierPrefix = WithDashSuffixOrEmpty<ExportModifier>
134+
type TypeGroup = Join<[ExportModifier, DeclareModifier, TypeSelector]>
164135

165-
type AsyncModifierPrefix = WithDashSuffixOrEmpty<AsyncModifier>
136+
type EnumGroup = Join<[ExportModifier, DeclareModifier, EnumSelector]>
166137

167138
type DecoratedModifier = 'decorated'
168139

rules/sort-object-types.types.ts

+19-28
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { JSONSchema4 } from '@typescript-eslint/utils/json-schema'
22

3-
import type { WithDashSuffixOrEmpty, Join } from '../typings'
3+
import type { Join } from '../typings'
44

55
import {
66
buildCustomGroupModifiersJsonSchema,
@@ -75,27 +75,15 @@ type CustomGroup = (
7575
groupName: string
7676
}
7777

78-
type MemberGroup = Join<
79-
[
80-
OptionalModifierPrefix,
81-
RequiredModifierPrefix,
82-
MultilineModifierPrefix,
83-
MemberSelector,
84-
]
85-
>
86-
87-
type MethodGroup = Join<
78+
type IndexSignatureGroup = Join<
8879
[
89-
OptionalModifierPrefix,
90-
RequiredModifierPrefix,
91-
MultilineModifierPrefix,
92-
MethodSelector,
80+
OptionalModifier,
81+
RequiredModifier,
82+
MultilineModifier,
83+
IndexSignatureSelector,
9384
]
9485
>
9586

96-
type IndexSignatureGroup =
97-
`${OptionalModifierPrefix | RequiredModifierPrefix}${MultilineModifierPrefix}${IndexSignatureSelector}`
98-
9987
/**
10088
* Only used in code, so I don't know if it's worth maintaining this.
10189
*/
@@ -108,31 +96,34 @@ type Group =
10896
| 'unknown'
10997
| string
11098

111-
type PropertyGroup =
112-
`${OptionalModifierPrefix | RequiredModifierPrefix}${MultilineModifierPrefix}${PropertySelector}`
113-
11499
interface BaseSingleCustomGroup<T extends Selector> {
115100
modifiers?: AllowedModifiersPerSelector[T][]
116101
selector?: T
117102
}
118103

104+
type PropertyGroup = Join<
105+
[OptionalModifier, RequiredModifier, MultilineModifier, PropertySelector]
106+
>
107+
108+
type MemberGroup = Join<
109+
[OptionalModifier, RequiredModifier, MultilineModifier, MemberSelector]
110+
>
111+
112+
type MethodGroup = Join<
113+
[OptionalModifier, RequiredModifier, MultilineModifier, MethodSelector]
114+
>
115+
119116
/**
120117
* @deprecated For {@link `MultilineModifier`}
121118
*/
122119
type MultilineGroup = Join<
123-
[OptionalModifierPrefix, RequiredModifierPrefix, MultilineSelector]
120+
[OptionalModifier, RequiredModifier, MultilineSelector]
124121
>
125122

126123
interface ElementNamePatternFilterCustomGroup {
127124
elementNamePattern?: string
128125
}
129126

130-
type MultilineModifierPrefix = WithDashSuffixOrEmpty<MultilineModifier>
131-
132-
type RequiredModifierPrefix = WithDashSuffixOrEmpty<RequiredModifier>
133-
134-
type OptionalModifierPrefix = WithDashSuffixOrEmpty<OptionalModifier>
135-
136127
type IndexSignatureSelector = 'index-signature'
137128

138129
/**

typings/index.ts

-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
export type { WithDashSuffixOrEmpty } from './with-dash-suffix-or-empty'
21
export type { SortingNode } from './sorting-node'
32
export type { Join } from './join'

typings/join.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,9 @@ export type Join<T extends string[]> = T extends [
22
infer First extends string,
33
...infer Rest extends string[],
44
]
5-
? `${First}${Join<Rest>}`
6-
: ''
5+
? Rest extends []
6+
? `${First}`
7+
: `${WithDashSuffixOrEmpty<First>}${Join<Rest>}`
8+
: never
9+
10+
type WithDashSuffixOrEmpty<T extends string> = `${T}-` | ''

typings/with-dash-suffix-or-empty.ts

-1
This file was deleted.

0 commit comments

Comments
 (0)