TypeScript: Improve argument expansion with `as` type expressions (#6471)

master
Matthew Leffler 2019-09-25 08:51:50 -04:00 committed by Lucas Duailibe
parent 90bb52439b
commit bb037eb218
5 changed files with 122 additions and 3 deletions

View File

@ -709,4 +709,4 @@ const fooooooooooooooo: SomeThing<boolean> = looooooooooooooooooooooooooooooongN
[@g-harel]: https://github.com/g-harel
[@jounqin]: https://github.com/JounQin
[@bakkot]: https://gibhub.com/bakkot
[@thorn0]: https://github.com/thorn0
[@thorn0]: https://github.com/thorn0

View File

@ -3756,8 +3756,8 @@ function couldGroupArg(arg) {
(arg.properties.length > 0 || arg.comments)) ||
(arg.type === "ArrayExpression" &&
(arg.elements.length > 0 || arg.comments)) ||
arg.type === "TSTypeAssertion" ||
arg.type === "TSAsExpression" ||
(arg.type === "TSTypeAssertion" && couldGroupArg(arg.expression)) ||
(arg.type === "TSAsExpression" && couldGroupArg(arg.expression)) ||
arg.type === "FunctionExpression" ||
(arg.type === "ArrowFunctionExpression" &&
// we want to avoid breaking inside composite return types but not simple keywords

View File

@ -0,0 +1,87 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`argument_expansion.js 1`] = `
====================================options=====================================
parsers: ["typescript"]
printWidth: 80
| printWidth
=====================================input======================================
const bar = [1,2,3].reduce((carry, value) => {
return [...carry, value];
}, ([] as unknown) as number[]);
const bar = [1,2,3].reduce((carry, value) => {
return [...carry, value];
}, <Array<number>>[]);
const bar = [1,2,3].reduce((carry, value) => {
return [...carry, value];
}, ([1, 2, 3] as unknown) as number[]);
const bar = [1,2,3].reduce((carry, value) => {
return [...carry, value];
}, <Array<number>>[1, 2, 3]);
const bar = [1,2,3].reduce((carry, value) => {
return {...carry, [value]: true};
}, ({} as unknown) as {[key: number]: boolean});
const bar = [1,2,3].reduce((carry, value) => {
return {...carry, [value]: true};
}, <{[key: number]: boolean}>{});
const bar = [1,2,3].reduce((carry, value) => {
return {...carry, [value]: true};
}, ({1: true} as unknown) as {[key: number]: boolean});
const bar = [1,2,3].reduce((carry, value) => {
return {...carry, [value]: true};
}, <{[key: number]: boolean}>{1: true});
=====================================output=====================================
const bar = [1, 2, 3].reduce((carry, value) => {
return [...carry, value];
}, ([] as unknown) as number[]);
const bar = [1, 2, 3].reduce((carry, value) => {
return [...carry, value];
}, <Array<number>>[]);
const bar = [1, 2, 3].reduce(
(carry, value) => {
return [...carry, value];
},
([1, 2, 3] as unknown) as number[]
);
const bar = [1, 2, 3].reduce(
(carry, value) => {
return [...carry, value];
},
<Array<number>>[1, 2, 3]
);
const bar = [1, 2, 3].reduce((carry, value) => {
return { ...carry, [value]: true };
}, ({} as unknown) as { [key: number]: boolean });
const bar = [1, 2, 3].reduce((carry, value) => {
return { ...carry, [value]: true };
}, <{ [key: number]: boolean }>{});
const bar = [1, 2, 3].reduce(
(carry, value) => {
return { ...carry, [value]: true };
},
({ 1: true } as unknown) as { [key: number]: boolean }
);
const bar = [1, 2, 3].reduce(
(carry, value) => {
return { ...carry, [value]: true };
},
<{ [key: number]: boolean }>{ 1: true }
);
================================================================================
`;

View File

@ -0,0 +1,31 @@
const bar = [1,2,3].reduce((carry, value) => {
return [...carry, value];
}, ([] as unknown) as number[]);
const bar = [1,2,3].reduce((carry, value) => {
return [...carry, value];
}, <Array<number>>[]);
const bar = [1,2,3].reduce((carry, value) => {
return [...carry, value];
}, ([1, 2, 3] as unknown) as number[]);
const bar = [1,2,3].reduce((carry, value) => {
return [...carry, value];
}, <Array<number>>[1, 2, 3]);
const bar = [1,2,3].reduce((carry, value) => {
return {...carry, [value]: true};
}, ({} as unknown) as {[key: number]: boolean});
const bar = [1,2,3].reduce((carry, value) => {
return {...carry, [value]: true};
}, <{[key: number]: boolean}>{});
const bar = [1,2,3].reduce((carry, value) => {
return {...carry, [value]: true};
}, ({1: true} as unknown) as {[key: number]: boolean});
const bar = [1,2,3].reduce((carry, value) => {
return {...carry, [value]: true};
}, <{[key: number]: boolean}>{1: true});

View File

@ -0,0 +1 @@
run_spec(__dirname, ["typescript"]);