fix(typescript): print arrow function type params on same line as params, fixes #2099 (#2101)

This commit is contained in:
Lucas Azzola authored and Christopher Chedeau committed 2017-06-11 07:30:51 -07:00
1 parent 026f9b4de7
commit ec7d99439d
4 files changed
+80 -10

No files matched your search

+33 -10
View File
@@ -429,8 +429,6 @@ function genericPrintNoParens(path, options, print, args) {
parts.push("async ");
}
parts.push(printFunctionTypeParameters(path, options, print));
if (canPrintParamsWithoutParens(n)) {
parts.push(path.call(print, "params", 0));
} else {
@@ -441,7 +439,9 @@ function genericPrintNoParens(path, options, print, args) {
path,
print,
options,
args && (args.expandLastArg || args.expandFirstArg)
/* expandLast */ args &&
(args.expandLastArg || args.expandFirstArg),
/* printTypeParams */ true
),
printReturnType(path, print)
])
@@ -1966,8 +1966,13 @@ function genericPrintNoParens(path, options, print, args) {
}
parts.push(
printFunctionTypeParameters(path, options, print),
printFunctionParams(path, print, options)
printFunctionParams(
path,
print,
options,
/* expandArg */ false,
/* printTypeParams */ true
)
);
// The returnType is not wrapped in a TypeAnnotation, so the colon
@@ -2459,8 +2464,13 @@ function genericPrintNoParens(path, options, print, args) {
path.call(print, "key"),
n.computed ? "]" : "",
n.optional ? "?" : "",
printFunctionTypeParameters(path, options, print),
printFunctionParams(path, print, options)
printFunctionParams(
path,
print,
options,
/* expandArg */ false,
/* printTypeParams */ true
)
);
if (n.typeAnnotation) {
@@ -2889,10 +2899,14 @@ function printFunctionTypeParameters(path, options, print) {
return "";
}
function printFunctionParams(path, print, options, expandArg) {
function printFunctionParams(path, print, options, expandArg, printTypeParams) {
const fun = path.getValue();
const paramsField = fun.parameters ? "parameters" : "params";
const typeParams = printTypeParams
? printFunctionTypeParameters(path, options, print)
: "";
let printed = [];
if (fun[paramsField]) {
printed = path.map(print, paramsField);
@@ -2915,6 +2929,7 @@ function printFunctionParams(path, print, options, expandArg) {
if (printed.length === 0) {
return concat([
typeParams,
"(",
comments.printDanglingComments(path, options, /* sameIndent */ true),
")"
@@ -2934,7 +2949,14 @@ function printFunctionParams(path, print, options, expandArg) {
// }) ) => {
// })
if (expandArg) {
return group(concat(["(", join(", ", printed.map(removeLines)), ")"]));
return group(
concat([
removeLines(typeParams),
"(",
join(", ", printed.map(removeLines)),
")"
])
);
}
// Single object destructuring should hug
@@ -2945,7 +2967,7 @@ function printFunctionParams(path, print, options, expandArg) {
// c
// }) {}
if (shouldHugArguments(fun)) {
return concat(["(", join(", ", printed), ")"]);
return concat([typeParams, "(", join(", ", printed), ")"]);
}
const parent = path.getParentNode();
@@ -2993,6 +3015,7 @@ function printFunctionParams(path, print, options, expandArg) {
!(lastParam && lastParam.type === "RestElement") && !fun.rest;
return concat([
typeParams,
"(",
indent(concat([softline, join(concat([",", line]), printed)])),
ifBreak(
@@ -0,0 +1,36 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`long-function-arg.ts 1`] = `
export const forwardS = R.curry(
<V,T>(prop: string, reducer: ReducerFunction<V, T>, value: V, state: {[name: string]: T}) =>
R.assoc(prop, reducer(value, state[prop]), state)
)
export const forwardS = R.curry(
<VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV, TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT>(prop: string, reducer: ReducerFunction<V, T>, value: V, state: {[name: string]: T}) =>
R.assoc(prop, reducer(value, state[prop]), state)
)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
export const forwardS = R.curry(
<V, T>(
prop: string,
reducer: ReducerFunction<V, T>,
value: V,
state: { [name: string]: T }
) => R.assoc(prop, reducer(value, state[prop]), state)
);
export const forwardS = R.curry(
<
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV,
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT
>(
prop: string,
reducer: ReducerFunction<V, T>,
value: V,
state: { [name: string]: T }
) => R.assoc(prop, reducer(value, state[prop]), state)
);
`;
@@ -0,0 +1 @@
run_spec(__dirname, { parser: "typescript" });
@@ -0,0 +1,10 @@
export const forwardS = R.curry(
<V,T>(prop: string, reducer: ReducerFunction<V, T>, value: V, state: {[name: string]: T}) =>
R.assoc(prop, reducer(value, state[prop]), state)
)
export const forwardS = R.curry(
<VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV, TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT>(prop: string, reducer: ReducerFunction<V, T>, value: V, state: {[name: string]: T}) =>
R.assoc(prop, reducer(value, state[prop]), state)
)