Skip to content

Commit 79a4823

Browse files
committed
feat!: rename optionality order option to group kind in sort-interfaces rule
1 parent 96cfcd8 commit 79a4823

File tree

3 files changed

+24
-25
lines changed

3 files changed

+24
-25
lines changed

docs/content/rules/sort-interfaces.mdx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -195,15 +195,15 @@ interface User {
195195

196196
In this example, the partitionByNewLine option will cause the rule to treat each group of members (separated by empty lines) independently, preserving their order within each group.
197197

198-
### optionalityOrder
198+
### groupKind
199199

200-
<sub>default: `'ignore'`</sub>
200+
<sub>default: `'mixed'`</sub>
201201

202202
Specifies how optional and required members should be ordered in TypeScript interfaces.
203203

204204
- `'optional-first'` — Put all optional members before required members.
205205
- `'required-first'` — Put all required members before optional members.
206-
- `'ignore'` — Do not enforce any specific order based on optionality.
206+
- `'mixed'` — Do not enforce any specific order based on optionality.
207207

208208
### groups
209209

rules/sort-interfaces.ts

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ type Group<T extends string[]> = 'multiline' | 'unknown' | T[number]
2323

2424
type Options<T extends string[]> = [
2525
Partial<{
26-
optionalityOrder: 'optional-first' | 'required-first' | 'ignore'
26+
groupKind: 'optional-first' | 'required-first' | 'mixed'
2727
customGroups: { [key: string]: string[] | string }
2828
type: 'alphabetical' | 'line-length' | 'natural'
2929
groups: (Group<T>[] | Group<T>)[]
@@ -75,9 +75,9 @@ export default createEslintRule<Options<string[]>, MESSAGE_ID>({
7575
'Allows to use spaces to separate the nodes into logical groups.',
7676
type: 'boolean',
7777
},
78-
optionalityOrder: {
78+
groupKind: {
7979
description: 'Specifies the order of optional and required nodes.',
80-
enum: ['ignore', 'optional-first', 'required-first'],
80+
enum: ['mixed', 'optional-first', 'required-first'],
8181
type: 'string',
8282
},
8383
groups: {
@@ -130,7 +130,7 @@ export default createEslintRule<Options<string[]>, MESSAGE_ID>({
130130
ignoreCase: true,
131131
ignorePattern: [],
132132
partitionByNewLine: false,
133-
optionalityOrder: 'ignore',
133+
groupKind: 'mixed',
134134
groups: [],
135135
customGroups: {},
136136
},
@@ -139,9 +139,9 @@ export default createEslintRule<Options<string[]>, MESSAGE_ID>({
139139
TSInterfaceDeclaration: node => {
140140
if (node.body.body.length > 1) {
141141
let options = complete(context.options.at(0), {
142-
optionalityOrder: 'ignore',
143142
partitionByNewLine: false,
144143
type: 'alphabetical',
144+
groupKind: 'mixed',
145145
ignorePattern: [],
146146
ignoreCase: true,
147147
customGroups: {},
@@ -266,15 +266,15 @@ export default createEslintRule<Options<string[]>, MESSAGE_ID>({
266266
)
267267
}
268268

269-
let { optionalityOrder } = options
269+
let { groupKind } = options
270270

271271
let checkOrder = (
272272
members: SortingNode[],
273273
left: SortingNode,
274274
right: SortingNode,
275275
iteration: number,
276276
) => {
277-
if (optionalityOrder === 'ignore') {
277+
if (groupKind === 'mixed') {
278278
return checkGroupSort(left, right)
279279
}
280280

@@ -291,8 +291,7 @@ export default createEslintRule<Options<string[]>, MESSAGE_ID>({
291291

292292
if (isMemberOptional(left.node) !== isMemberOptional(right.node)) {
293293
return (
294-
isMemberOptional(left.node) !==
295-
(optionalityOrder === 'optional-first')
294+
isMemberOptional(left.node) !== (groupKind === 'optional-first')
296295
)
297296
}
298297

@@ -312,7 +311,7 @@ export default createEslintRule<Options<string[]>, MESSAGE_ID>({
312311
fix: fixer => {
313312
let sortedNodes
314313

315-
if (optionalityOrder !== 'ignore') {
314+
if (groupKind !== 'mixed') {
316315
let optionalNodes = nodes.filter(member =>
317316
isMemberOptional(member.node),
318317
)
@@ -321,7 +320,7 @@ export default createEslintRule<Options<string[]>, MESSAGE_ID>({
321320
)
322321

323322
sortedNodes =
324-
optionalityOrder === 'optional-first'
323+
groupKind === 'optional-first'
325324
? [
326325
...toSorted(optionalNodes),
327326
...toSorted(requiredNodes),

test/sort-interfaces.test.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,7 @@ describe(ruleName, () => {
670670
options: [
671671
{
672672
...options,
673-
optionalityOrder: 'optional-first',
673+
groupKind: 'optional-first',
674674
},
675675
],
676676
},
@@ -698,7 +698,7 @@ describe(ruleName, () => {
698698
options: [
699699
{
700700
...options,
701-
optionalityOrder: 'optional-first',
701+
groupKind: 'optional-first',
702702
},
703703
],
704704
errors: [
@@ -746,7 +746,7 @@ describe(ruleName, () => {
746746
last: 'a',
747747
},
748748
groups: ['unknown', 'last'],
749-
optionalityOrder: 'optional-first',
749+
groupKind: 'optional-first',
750750
},
751751
],
752752
errors: [
@@ -1338,7 +1338,7 @@ describe(ruleName, () => {
13381338
options: [
13391339
{
13401340
...options,
1341-
optionalityOrder: 'optional-first',
1341+
groupKind: 'optional-first',
13421342
},
13431343
],
13441344
},
@@ -1366,7 +1366,7 @@ describe(ruleName, () => {
13661366
options: [
13671367
{
13681368
...options,
1369-
optionalityOrder: 'optional-first',
1369+
groupKind: 'optional-first',
13701370
},
13711371
],
13721372
errors: [
@@ -1969,7 +1969,7 @@ describe(ruleName, () => {
19691969
options: [
19701970
{
19711971
...options,
1972-
optionalityOrder: 'optional-first',
1972+
groupKind: 'optional-first',
19731973
},
19741974
],
19751975
},
@@ -1997,7 +1997,7 @@ describe(ruleName, () => {
19971997
options: [
19981998
{
19991999
...options,
2000-
optionalityOrder: 'optional-first',
2000+
groupKind: 'optional-first',
20012001
},
20022002
],
20032003
errors: [
@@ -2025,7 +2025,7 @@ describe(ruleName, () => {
20252025
options: [
20262026
{
20272027
...options,
2028-
optionalityOrder: 'required-first',
2028+
groupKind: 'required-first',
20292029
},
20302030
],
20312031
},
@@ -2053,7 +2053,7 @@ describe(ruleName, () => {
20532053
options: [
20542054
{
20552055
...options,
2056-
optionalityOrder: 'required-first',
2056+
groupKind: 'required-first',
20572057
},
20582058
],
20592059
errors: [
@@ -2108,7 +2108,7 @@ describe(ruleName, () => {
21082108
callback: 'on*',
21092109
},
21102110
groups: ['unknown', 'callback'],
2111-
optionalityOrder: 'required-first',
2111+
groupKind: 'required-first',
21122112
},
21132113
],
21142114
errors: [
@@ -2172,7 +2172,7 @@ describe(ruleName, () => {
21722172
options: [
21732173
{
21742174
...options,
2175-
optionalityOrder: 'required-first',
2175+
groupKind: 'required-first',
21762176
partitionByNewLine: true,
21772177
},
21782178
],

0 commit comments

Comments
 (0)