Skip to content

Commit

Permalink
Remove parens around TSInferType
Browse files Browse the repository at this point in the history
  • Loading branch information
fisker committed Aug 25, 2020
1 parent 7e5f6b9 commit 3ba06bb
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 1 deletion.
13 changes: 13 additions & 0 deletions changelog_unreleased/typescript/pr-9044.md
@@ -0,0 +1,13 @@
#### Remove parens around `TSInferType` ([#9044](https://github.com/prettier/prettier/pull/9044) by [@fisker](https://github.com/fisker))

<!-- prettier-ignore -->
```typescript
// Input
type Tail<T extends any[]> = T extends [infer U, ...infer R] ? R : never;

// Prettier stable
type Tail<T extends any[]> = T extends [infer U, ...(infer R)] ? R : never;

// Prettier master
type Tail<T extends any[]> = T extends [infer U, ...infer R] ? R : never;
```
6 changes: 5 additions & 1 deletion src/language-js/needs-parens.js
Expand Up @@ -417,8 +417,12 @@ function needsParens(path, options) {
return true;
}
// fallthrough
case "TSTypeOperator":
case "TSInferType":
if (node.type === "TSInferType" & parent.type === "TSRestType") {
return false;
}
// fallthrough
case "TSTypeOperator":
return (
parent.type === "TSArrayType" ||
parent.type === "TSOptionalType" ||
Expand Down
25 changes: 25 additions & 0 deletions tests/typescript/rest-type/__snapshots__/jsfmt.spec.js.snap
Expand Up @@ -14,6 +14,31 @@ type TupleWithRest = [number, ...(1 extends 2 ? string[] : number[])];
================================================================================
`;

exports[`infer-type.ts format 1`] = `
====================================options=====================================
parsers: ["typescript"]
printWidth: 80
| printWidth
=====================================input======================================
type Tail<T extends any[]> = T extends [infer U, ...infer R] ? R : never;
type ReduceNextElement<
T extends readonly unknown[]
> = T extends readonly [infer V, ...infer R] ? [V, R] : never
=====================================output=====================================
type Tail<T extends any[]> = T extends [infer U, ...infer R] ? R : never;
type ReduceNextElement<T extends readonly unknown[]> = T extends readonly [
infer V,
...infer R
]
? [V, R]
: never;
================================================================================
`;
exports[`simple.ts format 1`] = `
====================================options=====================================
parsers: ["typescript"]
Expand Down
5 changes: 5 additions & 0 deletions tests/typescript/rest-type/infer-type.ts
@@ -0,0 +1,5 @@
type Tail<T extends any[]> = T extends [infer U, ...infer R] ? R : never;

type ReduceNextElement<
T extends readonly unknown[]
> = T extends readonly [infer V, ...infer R] ? [V, R] : never

0 comments on commit 3ba06bb

Please sign in to comment.