Skip to content

Commit 9a9dcbe

Browse files
authored
Fix broken format for ...infer T (#9044)
1 parent 6feb8a6 commit 9a9dcbe

File tree

4 files changed

+48
-1
lines changed

4 files changed

+48
-1
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#### Fix broken format for `...infer T` ([#9044](https://github.com/prettier/prettier/pull/9044) by [@fisker](https://github.com/fisker))
2+
3+
<!-- prettier-ignore -->
4+
```typescript
5+
// Input
6+
type Tail<T extends any[]> = T extends [infer U, ...infer R] ? R : never;
7+
8+
// Prettier stable
9+
type Tail<T extends any[]> = T extends [infer U, ...(infer R)] ? R : never;
10+
11+
// Prettier master
12+
type Tail<T extends any[]> = T extends [infer U, ...infer R] ? R : never;
13+
```

src/language-js/needs-parens.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,8 +417,12 @@ function needsParens(path, options) {
417417
return true;
418418
}
419419
// fallthrough
420-
case "TSTypeOperator":
421420
case "TSInferType":
421+
if (node.type === "TSInferType" && parent.type === "TSRestType") {
422+
return false;
423+
}
424+
// fallthrough
425+
case "TSTypeOperator":
422426
return (
423427
parent.type === "TSArrayType" ||
424428
parent.type === "TSOptionalType" ||

tests/typescript/rest-type/__snapshots__/jsfmt.spec.js.snap

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,31 @@ type TupleWithRest = [number, ...(1 extends 2 ? string[] : number[])];
1414
================================================================================
1515
`;
1616

17+
exports[`infer-type.ts format 1`] = `
18+
====================================options=====================================
19+
parsers: ["typescript"]
20+
printWidth: 80
21+
| printWidth
22+
=====================================input======================================
23+
type Tail<T extends any[]> = T extends [infer U, ...infer R] ? R : never;
24+
25+
type ReduceNextElement<
26+
T extends readonly unknown[]
27+
> = T extends readonly [infer V, ...infer R] ? [V, R] : never
28+
29+
=====================================output=====================================
30+
type Tail<T extends any[]> = T extends [infer U, ...infer R] ? R : never;
31+
32+
type ReduceNextElement<T extends readonly unknown[]> = T extends readonly [
33+
infer V,
34+
...infer R
35+
]
36+
? [V, R]
37+
: never;
38+
39+
================================================================================
40+
`;
41+
1742
exports[`simple.ts format 1`] = `
1843
====================================options=====================================
1944
parsers: ["typescript"]
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type Tail<T extends any[]> = T extends [infer U, ...infer R] ? R : never;
2+
3+
type ReduceNextElement<
4+
T extends readonly unknown[]
5+
> = T extends readonly [infer V, ...infer R] ? [V, R] : never

0 commit comments

Comments
 (0)