From 2958548c2cd75065a0ef657735c83b497814fe0c Mon Sep 17 00:00:00 2001 From: Diogo Franco Date: Fri, 8 Dec 2017 17:38:31 +0900 Subject: [PATCH] Fix code generation for async generator methods (#6998) Fixes generator to write `async *foo() {}` instead of `*async foo() {}`. --- .../babel-generator/src/generators/methods.js | 12 ++++---- .../edgecase/async-generator/actual.js | 19 ++++++++++++ .../edgecase/async-generator/expected.js | 30 +++++++++++++++++++ .../edgecase/async-generator/options.json | 1 + 4 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 packages/babel-generator/test/fixtures/edgecase/async-generator/actual.js create mode 100644 packages/babel-generator/test/fixtures/edgecase/async-generator/expected.js create mode 100644 packages/babel-generator/test/fixtures/edgecase/async-generator/options.json diff --git a/packages/babel-generator/src/generators/methods.js b/packages/babel-generator/src/generators/methods.js index 54fa36c29f..5dc17e065a 100644 --- a/packages/babel-generator/src/generators/methods.js +++ b/packages/babel-generator/src/generators/methods.js @@ -31,12 +31,6 @@ export function _methodHead(node: Object) { const kind = node.kind; const key = node.key; - if (kind === "method" || kind === "init") { - if (node.generator) { - this.token("*"); - } - } - if (kind === "get" || kind === "set") { this.word(kind); this.space(); @@ -47,6 +41,12 @@ export function _methodHead(node: Object) { this.space(); } + if (kind === "method" || kind === "init") { + if (node.generator) { + this.token("*"); + } + } + if (node.computed) { this.token("["); this.print(key, node); diff --git a/packages/babel-generator/test/fixtures/edgecase/async-generator/actual.js b/packages/babel-generator/test/fixtures/edgecase/async-generator/actual.js new file mode 100644 index 0000000000..175aa46ce7 --- /dev/null +++ b/packages/babel-generator/test/fixtures/edgecase/async-generator/actual.js @@ -0,0 +1,19 @@ +function a() {} +function *b() {} +async function c() {} +async function *d() {} +var e = function () {}; +var f = function *() {}; +var g = async function () {}; +var h = async function *() {}; + +class A { + a() {} + *b() {} + async c() {} + async *d() {} + e = () => {}; + // f = () =>* {}; + g = async () => {}; + // h = async () =>* {}; +} diff --git a/packages/babel-generator/test/fixtures/edgecase/async-generator/expected.js b/packages/babel-generator/test/fixtures/edgecase/async-generator/expected.js new file mode 100644 index 0000000000..f66336927c --- /dev/null +++ b/packages/babel-generator/test/fixtures/edgecase/async-generator/expected.js @@ -0,0 +1,30 @@ +function a() {} + +function* b() {} + +async function c() {} + +async function* d() {} + +var e = function () {}; + +var f = function* () {}; + +var g = async function () {}; + +var h = async function* () {}; + +class A { + a() {} + + *b() {} + + async c() {} + + async *d() {} + + e = () => {}; // f = () =>* {}; + + g = async () => {}; // h = async () =>* {}; + +} \ No newline at end of file diff --git a/packages/babel-generator/test/fixtures/edgecase/async-generator/options.json b/packages/babel-generator/test/fixtures/edgecase/async-generator/options.json new file mode 100644 index 0000000000..1ec463510a --- /dev/null +++ b/packages/babel-generator/test/fixtures/edgecase/async-generator/options.json @@ -0,0 +1 @@ +{ "plugins": ["asyncGenerators", "classProperties"] }