Skip to content

Commit b4ee1cc

Browse files
authoredDec 12, 2024··
fix(sort-interfaces): prevent constructor declarations from being sorted
1 parent 648cf89 commit b4ee1cc

File tree

3 files changed

+88
-8
lines changed

3 files changed

+88
-8
lines changed
 

‎rules/sort-object-types.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,10 @@ export let sortObjectTypeElements = <MessageIds extends string>({
210210

211211
let formattedMembers: SortObjectTypesSortingNode[][] = elements.reduce(
212212
(accumulator: SortObjectTypesSortingNode[][], typeElement) => {
213-
if (typeElement.type === 'TSCallSignatureDeclaration') {
213+
if (
214+
typeElement.type === 'TSCallSignatureDeclaration' ||
215+
typeElement.type === 'TSConstructSignatureDeclaration'
216+
) {
214217
accumulator.push([])
215218
return accumulator
216219
}
@@ -240,10 +243,8 @@ export let sortObjectTypeElements = <MessageIds extends string>({
240243
name = formatName(
241244
sourceCode.text.slice(typeElement.range.at(0), endIndex),
242245
)
243-
} else if (
244-
typeElement.type === 'TSMethodSignature' &&
245-
'name' in typeElement.key
246-
) {
246+
} else if ('name' in typeElement.key) {
247+
// TSMethodSignature
247248
;({ name } = typeElement.key)
248249
/* v8 ignore next 8 - Unsure if we can reach it */
249250
} else {

‎test/sort-interfaces.test.ts

+31-3
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ describe(ruleName, () => {
477477
)
478478

479479
ruleTester.run(
480-
`${ruleName}(${type}): not sorts call signature declarations`,
480+
`${ruleName}(${type}): does not sort call signature declarations`,
481481
rule,
482482
{
483483
valid: [
@@ -500,6 +500,34 @@ describe(ruleName, () => {
500500
},
501501
)
502502

503+
ruleTester.run(
504+
`${ruleName}(${type}): does not sort constructor declarations`,
505+
rule,
506+
{
507+
valid: [
508+
{
509+
code: dedent`
510+
interface Interface {
511+
new (value: number | string): number;
512+
new (value: number): unknown;
513+
}
514+
`,
515+
options: [options],
516+
},
517+
{
518+
code: dedent`
519+
interface Interface {
520+
new (value: number): unknown;
521+
new (value: number | string): number;
522+
}
523+
`,
524+
options: [options],
525+
},
526+
],
527+
invalid: [],
528+
},
529+
)
530+
503531
ruleTester.run(
504532
`${ruleName}(${type}): sorts complex predefined groups`,
505533
rule,
@@ -2462,7 +2490,7 @@ describe(ruleName, () => {
24622490
)
24632491

24642492
ruleTester.run(
2465-
`${ruleName}(${type}): not sorts call signature declarations`,
2493+
`${ruleName}(${type}): does not sort call signature declarations`,
24662494
rule,
24672495
{
24682496
valid: [
@@ -3239,7 +3267,7 @@ describe(ruleName, () => {
32393267
)
32403268

32413269
ruleTester.run(
3242-
`${ruleName}(${type}): not sorts call signature declarations`,
3270+
`${ruleName}(${type}): does not sort call signature declarations`,
32433271
rule,
32443272
{
32453273
valid: [

‎test/sort-object-types.test.ts

+51
Original file line numberDiff line numberDiff line change
@@ -1834,6 +1834,57 @@ describe(ruleName, () => {
18341834
valid: [],
18351835
},
18361836
)
1837+
ruleTester.run(
1838+
`${ruleName}(${type}): does not sort call signature declarations`,
1839+
rule,
1840+
{
1841+
valid: [
1842+
{
1843+
code: dedent`
1844+
type Type = {
1845+
<Parameters extends Record<string, number | string>>(
1846+
input: AFunction<[Parameters], string>
1847+
): Alternatives<Parameters>
1848+
<A extends CountA>(input: Input): AFunction<
1849+
[number],
1850+
A[keyof A]
1851+
>
1852+
}
1853+
`,
1854+
options: [options],
1855+
},
1856+
],
1857+
invalid: [],
1858+
},
1859+
)
1860+
1861+
ruleTester.run(
1862+
`${ruleName}(${type}): does not sort constructor declarations`,
1863+
rule,
1864+
{
1865+
valid: [
1866+
{
1867+
code: dedent`
1868+
type Type = {
1869+
new (value: number | string): number;
1870+
new (value: number): unknown;
1871+
}
1872+
`,
1873+
options: [options],
1874+
},
1875+
{
1876+
code: dedent`
1877+
type Type = {
1878+
new (value: number): unknown;
1879+
new (value: number | string): number;
1880+
}
1881+
`,
1882+
options: [options],
1883+
},
1884+
],
1885+
invalid: [],
1886+
},
1887+
)
18371888
})
18381889

18391890
describe(`${ruleName}: sorting by natural order`, () => {

0 commit comments

Comments
 (0)
Please sign in to comment.