Fix non-idempotent formatting of function calls with complex type arguments (#12508)

* Fix

* Add TS tests

* Add Flow tests

* Add changelog
This commit is contained in:
Sosuke Suzuki authored and GitHub committed 2022-03-23 23:09:58 +09:00
1 parent 1939f92be5
commit becb6c9b74
6 files changed
+148 -1

No files matched your search

+37
View File
@@ -0,0 +1,37 @@
#### Fix non-idempotent formatting of function calls with complex type arguments (#12508 by @sosukesuzuki)
<!-- prettier-ignore -->
```tsx
// Input
const foo =
doSomething<{ foo1: "foo1", foo2: "foo2", foo3: "foo3", foo4: "foo4", foo5: "foo5" }>();
// Prettier stable (first)
const foo =
doSomething<{
foo1: "foo1";
foo2: "foo2";
foo3: "foo3";
foo4: "foo4";
foo5: "foo5";
}>();
// Prettier stable (second)
const foo = doSomething<{
foo1: "foo1";
foo2: "foo2";
foo3: "foo3";
foo4: "foo4";
foo5: "foo5";
}>();
// Prettier main
const foo = doSomething<{
foo1: "foo1";
foo2: "foo2";
foo3: "foo3";
foo4: "foo4";
foo5: "foo5";
}>();
```
+3 -1
View File
@@ -441,7 +441,9 @@ function isCallExpressionWithComplexTypeArguments(node, print) {
firstArg.type === "TSUnionType" ||
firstArg.type === "UnionTypeAnnotation" ||
firstArg.type === "TSIntersectionType" ||
firstArg.type === "IntersectionTypeAnnotation"
firstArg.type === "IntersectionTypeAnnotation" ||
firstArg.type === "TSTypeLiteral" ||
firstArg.type === "ObjectTypeAnnotation"
) {
return true;
}
@@ -110,3 +110,52 @@ const map: Map<Function, Foo<S>> = new Map();
================================================================================
`;
exports[`issue-12413.js format 1`] = `
====================================options=====================================
parsers: ["babel-flow", "flow"]
printWidth: 80
| printWidth
=====================================input======================================
let emit =
defineEmits<{ (event: "ready", canvas: HTMLCanvasElement): void; (event:"resize",canvas:HTMLCanvasElement):void; }>();
let abc =
func<{a:2,b:3,d:78,e:9,f:8,g:7,h:6,i:5,j:4,k:3,l:2,m:1,n:0,o:9,p:8,q:7,r:6,s:5,t:4,u:3,v:2,w:1,x:0,y:9,z:8}>();
=====================================output=====================================
let emit = defineEmits<{
(event: "ready", canvas: HTMLCanvasElement): void,
(event: "resize", canvas: HTMLCanvasElement): void,
}>();
let abc = func<{
a: 2,
b: 3,
d: 78,
e: 9,
f: 8,
g: 7,
h: 6,
i: 5,
j: 4,
k: 3,
l: 2,
m: 1,
n: 0,
o: 9,
p: 8,
q: 7,
r: 6,
s: 5,
t: 4,
u: 3,
v: 2,
w: 1,
x: 0,
y: 9,
z: 8,
}>();
================================================================================
`;
@@ -0,0 +1,5 @@
let emit =
defineEmits<{ (event: "ready", canvas: HTMLCanvasElement): void; (event:"resize",canvas:HTMLCanvasElement):void; }>();
let abc =
func<{a:2,b:3,d:78,e:9,f:8,g:7,h:6,i:5,j:4,k:3,l:2,m:1,n:0,o:9,p:8,q:7,r:6,s:5,t:4,u:3,v:2,w:1,x:0,y:9,z:8}>();
@@ -443,6 +443,55 @@ const map: Map<Function, Foo<S>> = new Map();
================================================================================
`;
exports[`issue-12413.ts format 1`] = `
====================================options=====================================
parsers: ["typescript"]
printWidth: 80
| printWidth
=====================================input======================================
let emit =
defineEmits<{ (event: "ready", canvas: HTMLCanvasElement): void; (event:"resize",canvas:HTMLCanvasElement):void; }>();
let abc =
func<{a:2,b:3,d:78,e:9,f:8,g:7,h:6,i:5,j:4,k:3,l:2,m:1,n:0,o:9,p:8,q:7,r:6,s:5,t:4,u:3,v:2,w:1,x:0,y:9,z:8}>();
=====================================output=====================================
let emit = defineEmits<{
(event: "ready", canvas: HTMLCanvasElement): void;
(event: "resize", canvas: HTMLCanvasElement): void;
}>();
let abc = func<{
a: 2;
b: 3;
d: 78;
e: 9;
f: 8;
g: 7;
h: 6;
i: 5;
j: 4;
k: 3;
l: 2;
m: 1;
n: 0;
o: 9;
p: 8;
q: 7;
r: 6;
s: 5;
t: 4;
u: 3;
v: 2;
w: 1;
x: 0;
y: 9;
z: 8;
}>();
================================================================================
`;
exports[`lone-arg.ts format 1`] = `
====================================options=====================================
parsers: ["typescript"]
@@ -0,0 +1,5 @@
let emit =
defineEmits<{ (event: "ready", canvas: HTMLCanvasElement): void; (event:"resize",canvas:HTMLCanvasElement):void; }>();
let abc =
func<{a:2,b:3,d:78,e:9,f:8,g:7,h:6,i:5,j:4,k:3,l:2,m:1,n:0,o:9,p:8,q:7,r:6,s:5,t:4,u:3,v:2,w:1,x:0,y:9,z:8}>();