diff --git a/packages/babel-plugin-transform-flow-comments/src/index.js b/packages/babel-plugin-transform-flow-comments/src/index.js index 027239b96d08..0389a046e9c5 100644 --- a/packages/babel-plugin-transform-flow-comments/src/index.js +++ b/packages/babel-plugin-transform-flow-comments/src/index.js @@ -146,14 +146,31 @@ export default declare(api => { Class(path) { const { node } = path; - if (node.typeParameters) { - const typeParameters = path.get("typeParameters"); + if (node.typeParameters || node.implements) { + const comments = []; + if (node.typeParameters) { + const typeParameters = path.get("typeParameters"); + comments.push( + generateComment(typeParameters, typeParameters.node).replace( + /^:: /, + "", + ), + ); + typeParameters.remove(); + } + if (node.implements) { + const impls = path.get("implements"); + comments.push( + "implements " + + impls + .map(impl => generateComment(impl).replace(/^:: /, "")) + .join(", "), + ); + delete node["implements"]; + } + const block = path.get("body"); - block.addComment( - "leading", - generateComment(typeParameters, typeParameters.node), - ); - typeParameters.remove(); + block.addComment("leading", ":: " + comments.join(" ")); } }, }, diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-2/input.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-2/input.js new file mode 100644 index 000000000000..68abd11b6acc --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-2/input.js @@ -0,0 +1 @@ +class Foo implements Bar, Baz {} \ No newline at end of file diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-2/output.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-2/output.js new file mode 100644 index 000000000000..c72770b29773 --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-2/output.js @@ -0,0 +1,3 @@ +class Foo +/*:: implements Bar, Baz*/ +{} diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-3/input.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-3/input.js new file mode 100644 index 000000000000..67517b8a1bee --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-3/input.js @@ -0,0 +1 @@ +class Foo implements Bar, Baz {} \ No newline at end of file diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-3/output.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-3/output.js new file mode 100644 index 000000000000..ee702c5f1b5d --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter-3/output.js @@ -0,0 +1,3 @@ +class Foo +/*:: implements Bar, Baz*/ +{} diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter/input.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter/input.js new file mode 100644 index 000000000000..9e65be152ed5 --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter/input.js @@ -0,0 +1 @@ +class Foo {} \ No newline at end of file diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter/output.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter/output.js new file mode 100644 index 000000000000..d504c239ddc1 --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/class-type-parameter/output.js @@ -0,0 +1,3 @@ +class Foo +/*:: */ +{}