From 8acf7083d8a456370f3cb6641ba3c8c32d72acdb Mon Sep 17 00:00:00 2001 From: Dan Harper Date: Mon, 12 Sep 2016 00:46:45 +0100 Subject: [PATCH 1/3] transform-flow-comments, single arrow param support #4503 --- packages/babel-generator/src/generators/methods.js | 10 ++++++++-- .../arrow-single-optional-param/actual.js | 1 + .../arrow-single-optional-param/expected.js | 1 + .../flow-comments/arrow-single-param-type/actual.js | 1 + .../flow-comments/arrow-single-param-type/expected.js | 1 + 5 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-optional-param/actual.js create mode 100644 packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-optional-param/expected.js create mode 100644 packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-param-type/actual.js create mode 100644 packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-param-type/expected.js diff --git a/packages/babel-generator/src/generators/methods.js b/packages/babel-generator/src/generators/methods.js index 39c9c1714c3c..b76f1c13f68d 100644 --- a/packages/babel-generator/src/generators/methods.js +++ b/packages/babel-generator/src/generators/methods.js @@ -77,8 +77,14 @@ export function ArrowFunctionExpression(node: Object) { this.space(); } - if (node.params.length === 1 && t.isIdentifier(node.params[0])) { - this.print(node.params[0], node); + let param; + + if ( + node.params.length === 1 + && t.isIdentifier(param = node.params[0]) + && !(node.typeParameters || node.returnType || param.typeAnnotation || param.optional || param.trailingComments) + ) { + this.print(param, node); } else { this._params(node); } diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-optional-param/actual.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-optional-param/actual.js new file mode 100644 index 000000000000..c5e4866bdc6d --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-optional-param/actual.js @@ -0,0 +1 @@ +const x = (foo?) => {} diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-optional-param/expected.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-optional-param/expected.js new file mode 100644 index 000000000000..b4c55a034047 --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-optional-param/expected.js @@ -0,0 +1 @@ +const x = (foo /*:: ?*/) => {}; diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-param-type/actual.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-param-type/actual.js new file mode 100644 index 000000000000..c144edb9aeb9 --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-param-type/actual.js @@ -0,0 +1 @@ +const x = (foo: string) => {}; diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-param-type/expected.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-param-type/expected.js new file mode 100644 index 000000000000..e29c6196f0b9 --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/arrow-single-param-type/expected.js @@ -0,0 +1 @@ +const x = (foo /*: string*/) => {}; From 6718821d96e48a7588d4f07f0ac929d52676e6ca Mon Sep 17 00:00:00 2001 From: Dan Harper Date: Mon, 12 Sep 2016 00:47:29 +0100 Subject: [PATCH 2/3] further tests for printing single arrow func param flow code --- .../test/fixtures/flow/arrow-functions/actual.js | 7 +++++++ .../test/fixtures/flow/arrow-functions/expected.js | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 packages/babel-generator/test/fixtures/flow/arrow-functions/actual.js create mode 100644 packages/babel-generator/test/fixtures/flow/arrow-functions/expected.js diff --git a/packages/babel-generator/test/fixtures/flow/arrow-functions/actual.js b/packages/babel-generator/test/fixtures/flow/arrow-functions/actual.js new file mode 100644 index 000000000000..a3d11b136d6b --- /dev/null +++ b/packages/babel-generator/test/fixtures/flow/arrow-functions/actual.js @@ -0,0 +1,7 @@ +const bar1 = (x: number): string => {}; +const bar2 = (x?) => {}; +const bar3 = (x?: string) => {}; +const bar4 = x => {}; +const bar5 = (x): string => {}; +const bar6 = (x: number) => {}; +const bar7 = (x) => {}; diff --git a/packages/babel-generator/test/fixtures/flow/arrow-functions/expected.js b/packages/babel-generator/test/fixtures/flow/arrow-functions/expected.js new file mode 100644 index 000000000000..a3d11b136d6b --- /dev/null +++ b/packages/babel-generator/test/fixtures/flow/arrow-functions/expected.js @@ -0,0 +1,7 @@ +const bar1 = (x: number): string => {}; +const bar2 = (x?) => {}; +const bar3 = (x?: string) => {}; +const bar4 = x => {}; +const bar5 = (x): string => {}; +const bar6 = (x: number) => {}; +const bar7 = (x) => {}; From cc5ef50d96014ae5ddab88f635299d025ec77b3f Mon Sep 17 00:00:00 2001 From: Dan Harper Date: Mon, 12 Sep 2016 07:52:25 +0100 Subject: [PATCH 3/3] cleanup --- .../babel-generator/src/generators/methods.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/babel-generator/src/generators/methods.js b/packages/babel-generator/src/generators/methods.js index b76f1c13f68d..720aa0c87bd3 100644 --- a/packages/babel-generator/src/generators/methods.js +++ b/packages/babel-generator/src/generators/methods.js @@ -77,14 +77,10 @@ export function ArrowFunctionExpression(node: Object) { this.space(); } - let param; - - if ( - node.params.length === 1 - && t.isIdentifier(param = node.params[0]) - && !(node.typeParameters || node.returnType || param.typeAnnotation || param.optional || param.trailingComments) - ) { - this.print(param, node); + const firstParam = node.params[0]; + + if (node.params.length === 1 && t.isIdentifier(firstParam) && !hasTypes(node, firstParam)) { + this.print(firstParam, node); } else { this._params(node); } @@ -95,3 +91,7 @@ export function ArrowFunctionExpression(node: Object) { this.print(node.body, node); } + +function hasTypes(node, param) { + return node.typeParameters || node.returnType || param.typeAnnotation || param.optional || param.trailingComments; +}