diff --git a/packages/babel-generator/src/generators/methods.js b/packages/babel-generator/src/generators/methods.js index 39c9c1714c3c..720aa0c87bd3 100644 --- a/packages/babel-generator/src/generators/methods.js +++ b/packages/babel-generator/src/generators/methods.js @@ -77,8 +77,10 @@ export function ArrowFunctionExpression(node: Object) { this.space(); } - if (node.params.length === 1 && t.isIdentifier(node.params[0])) { - this.print(node.params[0], 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); } @@ -89,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; +} 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) => {}; 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*/) => {};