From 9c608d2ec11343cce4bb0b488ab5a228b2c7fa06 Mon Sep 17 00:00:00 2001 From: Lucas Azzola Date: Mon, 12 Jun 2017 09:06:38 +1000 Subject: [PATCH] fix(typescript): use printFunctionParams for call/construct signature, fixes #2105 (#2106) --- src/printer.js | 18 +-- .../__snapshots__/jsfmt.spec.js.snap | 113 ++++++++++++++++++ tests/typescript_new/jsfmt.spec.js | 1 + tests/typescript_new/new-signature.ts | 52 ++++++++ 4 files changed, 176 insertions(+), 8 deletions(-) create mode 100644 tests/typescript_new/__snapshots__/jsfmt.spec.js.snap create mode 100644 tests/typescript_new/jsfmt.spec.js create mode 100644 tests/typescript_new/new-signature.ts diff --git a/src/printer.js b/src/printer.js index ca1df1026..9daca9b42 100644 --- a/src/printer.js +++ b/src/printer.js @@ -2405,17 +2405,19 @@ function genericPrintNoParens(path, options, print, args) { if (n.type !== "TSCallSignature") { parts.push("new "); } - const isType = n.type === "TSConstructorType"; - if (n.typeParameters) { - parts.push(printTypeParameters(path, options, print, "typeParameters")); - } + parts.push( + printFunctionParams( + path, + print, + options, + /* expandArg */ false, + /* printTypeParams */ true + ) + ); - const params = n.params - ? path.map(print, "params") - : path.map(print, "parameters"); - parts.push("(", join(", ", params), ")"); if (n.typeAnnotation) { + const isType = n.type === "TSConstructorType"; parts.push(isType ? " => " : ": ", path.call(print, "typeAnnotation")); } return concat(parts); diff --git a/tests/typescript_new/__snapshots__/jsfmt.spec.js.snap b/tests/typescript_new/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 000000000..728502074 --- /dev/null +++ b/tests/typescript_new/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,113 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`new-signature.ts 1`] = ` +interface FooConstructor { + new ( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + h: number + ): Foo; +} + +interface BarConstructor { + new ( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + h: number + ): Foo; +} + +type BazConstructor = { + new ( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + h: number + ): Foo; +} + + +interface ConstructorBigGenerics { + new ( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + h: number + ): Foo; +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +interface FooConstructor { + new ( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + h: number + ): Foo; +} + +interface BarConstructor { + new ( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + h: number + ): Foo; +} + +type BazConstructor = { + new ( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + h: number + ): Foo; +}; + +interface ConstructorBigGenerics { + new < + AAAAAAAAAAAAAAAAAAAAAAAA, + AAAAAAAAAAAAAAAAAAAAAAAA, + AAAAAAAAAAAAAAAAAAAAAAAA + >( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + h: number + ): Foo; +} + +`; diff --git a/tests/typescript_new/jsfmt.spec.js b/tests/typescript_new/jsfmt.spec.js new file mode 100644 index 000000000..bc085c48c --- /dev/null +++ b/tests/typescript_new/jsfmt.spec.js @@ -0,0 +1 @@ +run_spec(__dirname, { parser: "typescript" }); diff --git a/tests/typescript_new/new-signature.ts b/tests/typescript_new/new-signature.ts new file mode 100644 index 000000000..6dddeca78 --- /dev/null +++ b/tests/typescript_new/new-signature.ts @@ -0,0 +1,52 @@ +interface FooConstructor { + new ( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + h: number + ): Foo; +} + +interface BarConstructor { + new ( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + h: number + ): Foo; +} + +type BazConstructor = { + new ( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + h: number + ): Foo; +} + + +interface ConstructorBigGenerics { + new ( + a: number, + b: number, + c: number, + d: number, + e: number, + f: number, + g: number, + h: number + ): Foo; +}