Skip to content

Commit f1b18f2

Browse files
authored
Add parentheses to TypeofTypeAnnotation (#14458)
1 parent 3d70637 commit f1b18f2

File tree

5 files changed

+35
-21
lines changed

5 files changed

+35
-21
lines changed

changelog_unreleased/flow/14458.md

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#### Add parentheses for `TypeofTypeAnnotation` to improve readability (#14458 by @fisker)
2+
3+
<!-- prettier-ignore -->
4+
```tsx
5+
// Input
6+
type A = (typeof node.children)[];
7+
8+
// Prettier stable
9+
type A = typeof node.children[];
10+
11+
// Prettier main
12+
type A = (typeof node.children)[];
13+
```

src/language-js/needs-parens.js

+8-7
Original file line numberDiff line numberDiff line change
@@ -529,6 +529,14 @@ function needsParens(path, options) {
529529
(name === "objectType" && parent.type === "TSIndexedAccessType") ||
530530
(name === "elementType" && parent.type === "TSArrayType")
531531
);
532+
// Same as `TSTypeQuery`, but for Flow syntax
533+
case "TypeofTypeAnnotation":
534+
return (
535+
(name === "objectType" &&
536+
(parent.type === "IndexedAccessType" ||
537+
parent.type === "OptionalIndexedAccessType")) ||
538+
(name === "elementType" && parent.type === "ArrayTypeAnnotation")
539+
);
532540
case "ArrayTypeAnnotation":
533541
return parent.type === "NullableTypeAnnotation";
534542

@@ -583,13 +591,6 @@ function needsParens(path, options) {
583591
case "OptionalIndexedAccessType":
584592
return name === "objectType" && parent.type === "IndexedAccessType";
585593

586-
case "TypeofTypeAnnotation":
587-
return (
588-
name === "objectType" &&
589-
(parent.type === "IndexedAccessType" ||
590-
parent.type === "OptionalIndexedAccessType")
591-
);
592-
593594
case "StringLiteral":
594595
case "NumericLiteral":
595596
case "Literal":

tests/format/typescript/typeof/__snapshots__/jsfmt.spec.js.snap

+9-9
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22

33
exports[`typeof.ts format 1`] = `
44
====================================options=====================================
5-
parsers: ["typescript"]
5+
parsers: ["typescript", "flow"]
66
printWidth: 80
77
| printWidth
88
=====================================input======================================
9-
a as (typeof node.children)[number]
10-
a as (typeof node.children)[]
11-
a as ((typeof node.children)[number])[]
12-
a as number[(typeof node.children)]
9+
type A = (typeof node.children)[number];
10+
type B = (typeof node.children)[];
11+
type C = ((typeof node.children)[number])[];
12+
type D = number[(typeof node.children)];
1313
1414
=====================================output=====================================
15-
a as (typeof node.children)[number];
16-
a as (typeof node.children)[];
17-
a as (typeof node.children)[number][];
18-
a as number[typeof node.children];
15+
type A = (typeof node.children)[number];
16+
type B = (typeof node.children)[];
17+
type C = (typeof node.children)[number][];
18+
type D = number[typeof node.children];
1919
2020
================================================================================
2121
`;
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
run_spec(__dirname, ["typescript"]);
1+
run_spec(__dirname, ["typescript", "flow"]);
+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
a as (typeof node.children)[number]
2-
a as (typeof node.children)[]
3-
a as ((typeof node.children)[number])[]
4-
a as number[(typeof node.children)]
1+
type A = (typeof node.children)[number];
2+
type B = (typeof node.children)[];
3+
type C = ((typeof node.children)[number])[];
4+
type D = number[(typeof node.children)];

0 commit comments

Comments
 (0)