diff --git a/packages/babel-helper-define-map/src/index.js b/packages/babel-helper-define-map/src/index.js index 131b02a8c755..653674755507 100644 --- a/packages/babel-helper-define-map/src/index.js +++ b/packages/babel-helper-define-map/src/index.js @@ -55,6 +55,7 @@ export function push(mutatorMap: Object, node: Object, kind: string, file, scope value = node.value; } else if (t.isObjectMethod(node) || t.isClassMethod(node)) { value = t.functionExpression(null, node.params, node.body, node.generator, node.async); + value.returnType = node.returnType; } let inheritedKind = toKind(node); diff --git a/packages/babel-plugin-transform-es2015-classes/src/loose.js b/packages/babel-plugin-transform-es2015-classes/src/loose.js index e44ebe7089c7..5c9122bacc0c 100644 --- a/packages/babel-plugin-transform-es2015-classes/src/loose.js +++ b/packages/babel-plugin-transform-es2015-classes/src/loose.js @@ -17,6 +17,7 @@ export default class LooseClassTransformer extends VanillaTransformer { let methodName = t.memberExpression(classRef, node.key, node.computed || t.isLiteral(node.key)); let func = t.functionExpression(null, node.params, node.body, node.generator, node.async); + func.returnType = node.returnType; let key = t.toComputedKey(node, node.key); if (t.isStringLiteral(key)) { func = nameFunction({ diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/method-return-type-annotation/actual.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/method-return-type-annotation/actual.js new file mode 100644 index 000000000000..918e7469b6c7 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/method-return-type-annotation/actual.js @@ -0,0 +1,6 @@ +// @flow +class C { + m(x: number): string { + return 'a'; + } +} diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/method-return-type-annotation/expected.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/method-return-type-annotation/expected.js new file mode 100644 index 000000000000..c426f3b6ac27 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/method-return-type-annotation/expected.js @@ -0,0 +1,12 @@ +// @flow +var C = function () { + function C() { + babelHelpers.classCallCheck(this, C); + } + + C.prototype.m = function m(x: number): string { + return 'a'; + }; + + return C; +}(); diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/method-return-type-annotation/options.json b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/method-return-type-annotation/options.json new file mode 100644 index 000000000000..8c5be0363c3a --- /dev/null +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/loose/method-return-type-annotation/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["external-helpers", "transform-es2015-function-name", ["transform-es2015-classes", { "loose": true }], "transform-es2015-spread", "transform-es2015-block-scoping", "syntax-flow"] +} diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/spec/method-return-type-annotation/actual.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/spec/method-return-type-annotation/actual.js new file mode 100644 index 000000000000..918e7469b6c7 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/spec/method-return-type-annotation/actual.js @@ -0,0 +1,6 @@ +// @flow +class C { + m(x: number): string { + return 'a'; + } +} diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/spec/method-return-type-annotation/expected.js b/packages/babel-plugin-transform-es2015-classes/test/fixtures/spec/method-return-type-annotation/expected.js new file mode 100644 index 000000000000..97a5968f04da --- /dev/null +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/spec/method-return-type-annotation/expected.js @@ -0,0 +1,14 @@ +// @flow +var C = function () { + function C() { + babelHelpers.classCallCheck(this, C); + } + + babelHelpers.createClass(C, [{ + key: 'm', + value: function m(x: number): string { + return 'a'; + } + }]); + return C; +}(); diff --git a/packages/babel-plugin-transform-es2015-classes/test/fixtures/spec/method-return-type-annotation/options.json b/packages/babel-plugin-transform-es2015-classes/test/fixtures/spec/method-return-type-annotation/options.json new file mode 100644 index 000000000000..f5d949b7eab3 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-classes/test/fixtures/spec/method-return-type-annotation/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["external-helpers", "transform-es2015-function-name", "transform-es2015-classes", "transform-es2015-spread", "transform-es2015-block-scoping", "syntax-flow"] +} diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-loose-return-type-annotation/actual.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-loose-return-type-annotation/actual.js new file mode 100644 index 000000000000..918e7469b6c7 --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-loose-return-type-annotation/actual.js @@ -0,0 +1,6 @@ +// @flow +class C { + m(x: number): string { + return 'a'; + } +} diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-loose-return-type-annotation/expected.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-loose-return-type-annotation/expected.js new file mode 100644 index 000000000000..82c2e802ada8 --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-loose-return-type-annotation/expected.js @@ -0,0 +1,14 @@ +'use strict'; + +// @flow +var C = function () { + function C() { + babelHelpers.classCallCheck(this, C); + } + + C.prototype.m = function m(x /*: number*/) /*: string*/ { + return 'a'; + }; + + return C; +}(); diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-loose-return-type-annotation/options.json b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-loose-return-type-annotation/options.json new file mode 100644 index 000000000000..5c34f0f1ea77 --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-loose-return-type-annotation/options.json @@ -0,0 +1,4 @@ +{ + "presets": [["es2015", { "loose": true }]], + "plugins": ["transform-flow-comments", "external-helpers"] +} diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-return-type-annotation/actual.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-return-type-annotation/actual.js new file mode 100644 index 000000000000..918e7469b6c7 --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-return-type-annotation/actual.js @@ -0,0 +1,6 @@ +// @flow +class C { + m(x: number): string { + return 'a'; + } +} diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-return-type-annotation/expected.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-return-type-annotation/expected.js new file mode 100644 index 000000000000..355d1ce274f4 --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-return-type-annotation/expected.js @@ -0,0 +1,16 @@ +'use strict'; + +// @flow +var C = function () { + function C() { + babelHelpers.classCallCheck(this, C); + } + + babelHelpers.createClass(C, [{ + key: 'm', + value: function m(x /*: number*/) /*: string*/ { + return 'a'; + } + }]); + return C; +}(); diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-return-type-annotation/options.json b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-return-type-annotation/options.json new file mode 100644 index 000000000000..8116b856f31a --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/transformed-class-method-return-type-annotation/options.json @@ -0,0 +1,4 @@ +{ + "presets": ["es2015"], + "plugins": ["transform-flow-comments", "external-helpers"] +} diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-loose-return-type-annotation/actual.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-loose-return-type-annotation/actual.js new file mode 100644 index 000000000000..918e7469b6c7 --- /dev/null +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-loose-return-type-annotation/actual.js @@ -0,0 +1,6 @@ +// @flow +class C { + m(x: number): string { + return 'a'; + } +} diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-loose-return-type-annotation/expected.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-loose-return-type-annotation/expected.js new file mode 100644 index 000000000000..8892b9861a2c --- /dev/null +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-loose-return-type-annotation/expected.js @@ -0,0 +1,13 @@ +'use strict'; + +var C = function () { + function C() { + babelHelpers.classCallCheck(this, C); + } + + C.prototype.m = function m(x) { + return 'a'; + }; + + return C; +}(); diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-loose-return-type-annotation/options.json b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-loose-return-type-annotation/options.json new file mode 100644 index 000000000000..85b91fb83fbe --- /dev/null +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-loose-return-type-annotation/options.json @@ -0,0 +1,4 @@ +{ + "presets": [["es2015", { "loose": true }]], + "plugins": ["transform-flow-strip-types", "external-helpers"] +} diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-return-type-annotation/actual.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-return-type-annotation/actual.js new file mode 100644 index 000000000000..918e7469b6c7 --- /dev/null +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-return-type-annotation/actual.js @@ -0,0 +1,6 @@ +// @flow +class C { + m(x: number): string { + return 'a'; + } +} diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-return-type-annotation/expected.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-return-type-annotation/expected.js new file mode 100644 index 000000000000..fd8f42aacd69 --- /dev/null +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-return-type-annotation/expected.js @@ -0,0 +1,15 @@ +'use strict'; + +var C = function () { + function C() { + babelHelpers.classCallCheck(this, C); + } + + babelHelpers.createClass(C, [{ + key: 'm', + value: function m(x) { + return 'a'; + } + }]); + return C; +}(); diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-return-type-annotation/options.json b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-return-type-annotation/options.json new file mode 100644 index 000000000000..9d96c07c6bf8 --- /dev/null +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/regression/transformed-class-method-return-type-annotation/options.json @@ -0,0 +1,4 @@ +{ + "presets": ["es2015"], + "plugins": ["transform-flow-strip-types", "external-helpers"] +}