Skip to content

Commit

Permalink
Fix non-idempotent formatting of function calls with complex type arg…
Browse files Browse the repository at this point in the history
…uments (#12508)

* Fix

* Add TS tests

* Add Flow tests

* Add changelog
  • Loading branch information
sosukesuzuki committed Mar 23, 2022
1 parent 1939f92 commit becb6c9
Show file tree
Hide file tree
Showing 6 changed files with 148 additions and 1 deletion.
37 changes: 37 additions & 0 deletions changelog_unreleased/typescript/12508.md
@@ -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";
}>();

```
4 changes: 3 additions & 1 deletion src/language-js/print/assignment.js
Expand Up @@ -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;
}
Expand Down
49 changes: 49 additions & 0 deletions tests/format/flow/assignments/__snapshots__/jsfmt.spec.js.snap
Expand Up @@ -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,
}>();
================================================================================
`;
5 changes: 5 additions & 0 deletions tests/format/flow/assignments/issue-12413.js
@@ -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}>();
Expand Up @@ -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"]
Expand Down
5 changes: 5 additions & 0 deletions tests/format/typescript/assignment/issue-12413.ts
@@ -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}>();

0 comments on commit becb6c9

Please sign in to comment.