From 636c6ab65de98cb4ad495877f7b70b99c9151f94 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2020 05:05:48 +0000 Subject: [PATCH 1/8] Build(deps): Bump @babel/parser from 7.11.2 to 7.11.3 Bumps [@babel/parser](https://github.com/babel/babel/tree/HEAD/packages/babel-parser) from 7.11.2 to 7.11.3. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.11.3/packages/babel-parser) Signed-off-by: dependabot[bot] --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 47a469d916b8..ef7935c52b0f 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "dependencies": { "@angular/compiler": "10.0.8", "@babel/code-frame": "7.10.4", - "@babel/parser": "7.11.2", + "@babel/parser": "7.11.3", "@glimmer/syntax": "0.56.0", "@iarna/toml": "2.2.5", "@typescript-eslint/typescript-estree": "3.8.0", diff --git a/yarn.lock b/yarn.lock index 869fcd00efcc..ca3b6d4d7e00 100644 --- a/yarn.lock +++ b/yarn.lock @@ -279,10 +279,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@7.11.2", "@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.2.tgz#0882ab8a455df3065ea2dcb4c753b2460a24bead" - integrity sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw== +"@babel/parser@7.11.3", "@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.1": + version "7.11.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.3.tgz#9e1eae46738bcd08e23e867bab43e7b95299a8f9" + integrity sha512-REo8xv7+sDxkKvoxEywIdsNFiZLybwdI7hcT5uEPyQrSMB4YQ973BfC9OOrD/81MaIjh6UxdulIQXkjmiH3PcA== "@babel/plugin-proposal-async-generator-functions@^7.10.4": version "7.10.4" From 00a6c2d51f6c62153ea516c8e6745b02a0c49af1 Mon Sep 17 00:00:00 2001 From: fisker Date: Mon, 10 Aug 2020 14:33:15 +0800 Subject: [PATCH 2/8] Add test --- .../objects/__snapshots__/jsfmt.spec.js.snap | 30 +++++++++++++++++-- ...sequence-key.js => escape-sequence-key.js} | 0 .../js/objects/invalid-accessor-generator.js | 7 +++++ .../{right_break.js => right-break.js} | 0 4 files changed, 35 insertions(+), 2 deletions(-) rename tests/js/objects/{escape sequence-key.js => escape-sequence-key.js} (100%) create mode 100644 tests/js/objects/invalid-accessor-generator.js rename tests/js/objects/{right_break.js => right-break.js} (100%) diff --git a/tests/js/objects/__snapshots__/jsfmt.spec.js.snap b/tests/js/objects/__snapshots__/jsfmt.spec.js.snap index e3887e88d434..e81ff0dde5d7 100644 --- a/tests/js/objects/__snapshots__/jsfmt.spec.js.snap +++ b/tests/js/objects/__snapshots__/jsfmt.spec.js.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`escape sequence-key.js format 1`] = ` +exports[`escape-sequence-key.js format 1`] = ` ====================================options===================================== parsers: ["babel"] printWidth: 80 @@ -113,6 +113,32 @@ const a3 = { ================================================================================ `; +exports[`invalid-accessor-generator.js format 1`] = ` +====================================options===================================== +parsers: ["babel"] +printWidth: 80 + | printWidth +=====================================input====================================== +// Invalid, but recoverable +// https://github.com/babel/babel/pull/11921/ + +({ + get *iterator() { }, + set *iterator(iter) { } +}); + +=====================================output===================================== +// Invalid, but recoverable +// https://github.com/babel/babel/pull/11921/ + +({ + get iterator() {}, + set iterator(iter) {}, +}); + +================================================================================ +`; + exports[`method.js format 1`] = ` ====================================options===================================== parsers: ["babel"] @@ -165,7 +191,7 @@ group( ================================================================================ `; -exports[`right_break.js format 1`] = ` +exports[`right-break.js format 1`] = ` ====================================options===================================== parsers: ["babel"] printWidth: 80 diff --git a/tests/js/objects/escape sequence-key.js b/tests/js/objects/escape-sequence-key.js similarity index 100% rename from tests/js/objects/escape sequence-key.js rename to tests/js/objects/escape-sequence-key.js diff --git a/tests/js/objects/invalid-accessor-generator.js b/tests/js/objects/invalid-accessor-generator.js new file mode 100644 index 000000000000..68fa7ee93826 --- /dev/null +++ b/tests/js/objects/invalid-accessor-generator.js @@ -0,0 +1,7 @@ +// Invalid, but recoverable +// https://github.com/babel/babel/pull/11921/ + +({ + get *iterator() { }, + set *iterator(iter) { } +}); diff --git a/tests/js/objects/right_break.js b/tests/js/objects/right-break.js similarity index 100% rename from tests/js/objects/right_break.js rename to tests/js/objects/right-break.js From 27e0be07cb983fb7be9e234ca9708864c337e55c Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 1 Sep 2020 14:11:57 +0800 Subject: [PATCH 3/8] Fix accessorIsGenerator --- package.json | 2 +- src/language-js/printer-estree.js | 8 +++++--- tests/js/objects/__snapshots__/jsfmt.spec.js.snap | 4 ++-- yarn.lock | 8 ++++---- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 5bddf8ae79a3..d4f4b77cb7ee 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "dependencies": { "@angular/compiler": "10.0.14", "@babel/code-frame": "7.10.4", - "@babel/parser": "7.11.3", + "@babel/parser": "7.11.5", "@glimmer/syntax": "0.60.0", "@iarna/toml": "2.2.5", "@typescript-eslint/typescript-estree": "3.10.1", diff --git a/src/language-js/printer-estree.js b/src/language-js/printer-estree.js index 66f2e0f348d9..74c78b6a7105 100644 --- a/src/language-js/printer-estree.js +++ b/src/language-js/printer-estree.js @@ -3682,15 +3682,17 @@ function printMethod(path, options, print) { if (value.async) { parts.push("async "); } - if (value.generator) { - parts.push("*"); - } } else { assert.ok(kind === "get" || kind === "set"); parts.push(kind, " "); } + // A `getter`/`setter` can't be a generator, but it's recoverable + if (value.generator) { + parts.push("*"); + } + parts.push( printPropertyKey(path, options, print), node.optional || node.key.optional ? "?" : "", diff --git a/tests/js/objects/__snapshots__/jsfmt.spec.js.snap b/tests/js/objects/__snapshots__/jsfmt.spec.js.snap index 5273e13430d5..8d395f871d40 100644 --- a/tests/js/objects/__snapshots__/jsfmt.spec.js.snap +++ b/tests/js/objects/__snapshots__/jsfmt.spec.js.snap @@ -132,8 +132,8 @@ printWidth: 80 // https://github.com/babel/babel/pull/11921/ ({ - get iterator() {}, - set iterator(iter) {}, + get *iterator() {}, + set *iterator(iter) {}, }); ================================================================================ diff --git a/yarn.lock b/yarn.lock index 9cd7976ee25d..0b844925130d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -279,10 +279,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@7.11.2": - version "7.11.2" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.2.tgz#0882ab8a455df3065ea2dcb4c753b2460a24bead" - integrity sha512-Vuj/+7vLo6l1Vi7uuO+1ngCDNeVmNbTngcJFKCR/oEtz8tKz0CJxZEGmPt9KcIloZhOZ3Zit6xbpXT2MDlS9Vw== +"@babel/parser@7.11.5": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" + integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== "@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.4": version "7.11.4" From 08d53bff3bf4b9a7980bd77b6561a85874eb191c Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 1 Sep 2020 14:13:28 +0800 Subject: [PATCH 4/8] More test --- tests/js/objects/__snapshots__/jsfmt.spec.js.snap | 6 +++++- tests/js/objects/invalid-accessor-generator.js | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/js/objects/__snapshots__/jsfmt.spec.js.snap b/tests/js/objects/__snapshots__/jsfmt.spec.js.snap index 8d395f871d40..fe84e6fa3470 100644 --- a/tests/js/objects/__snapshots__/jsfmt.spec.js.snap +++ b/tests/js/objects/__snapshots__/jsfmt.spec.js.snap @@ -124,7 +124,9 @@ printWidth: 80 ({ get *iterator() { }, - set *iterator(iter) { } + set *iterator(iter) { }, + get iterator2() { }, + set iterator2(iter) { }, }); =====================================output===================================== @@ -134,6 +136,8 @@ printWidth: 80 ({ get *iterator() {}, set *iterator(iter) {}, + get iterator2() {}, + set iterator2(iter) {}, }); ================================================================================ diff --git a/tests/js/objects/invalid-accessor-generator.js b/tests/js/objects/invalid-accessor-generator.js index 68fa7ee93826..80f40624b4b4 100644 --- a/tests/js/objects/invalid-accessor-generator.js +++ b/tests/js/objects/invalid-accessor-generator.js @@ -3,5 +3,7 @@ ({ get *iterator() { }, - set *iterator(iter) { } + set *iterator(iter) { }, + get iterator2() { }, + set iterator2(iter) { }, }); From b6f16b3114ff233c8f063c3467cedba35d3a3cf0 Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 1 Sep 2020 14:41:41 +0800 Subject: [PATCH 5/8] Add tests on invalid flow async generic arrow syntax https://github.com/babel/babel/pull/11979 --- .../errors/flow/__snapshots__/jsfmt.spec.js.snap | 7 +++++++ tests/misc/errors/flow/async-arrow-invalid.js | 1 + .../__snapshots__/jsfmt.spec.js.snap | 14 ++++++++++++++ tests/misc/flow-babel-only/async-arrow-invalid.js | 1 + 4 files changed, 23 insertions(+) create mode 100644 tests/misc/errors/flow/async-arrow-invalid.js create mode 100644 tests/misc/flow-babel-only/async-arrow-invalid.js diff --git a/tests/misc/errors/flow/__snapshots__/jsfmt.spec.js.snap b/tests/misc/errors/flow/__snapshots__/jsfmt.spec.js.snap index 9389c007d8f4..fa12c2728b40 100644 --- a/tests/misc/errors/flow/__snapshots__/jsfmt.spec.js.snap +++ b/tests/misc/errors/flow/__snapshots__/jsfmt.spec.js.snap @@ -1,5 +1,12 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`async-arrow-invalid.js error test 1`] = ` +"Unexpected token ILLEGAL (2:1) + 1 | async () => {} +> 2 | + | ^" +`; + exports[`default-escaped.js error test 1`] = ` "Unexpected identifier, expected the token \`{\` (1:8) > 1 | export asyn\\\\u{63} from \\"async\\"; diff --git a/tests/misc/errors/flow/async-arrow-invalid.js b/tests/misc/errors/flow/async-arrow-invalid.js new file mode 100644 index 000000000000..0476a2922990 --- /dev/null +++ b/tests/misc/errors/flow/async-arrow-invalid.js @@ -0,0 +1 @@ + async () => {} diff --git a/tests/misc/flow-babel-only/__snapshots__/jsfmt.spec.js.snap b/tests/misc/flow-babel-only/__snapshots__/jsfmt.spec.js.snap index 1f242e9e945b..3fd70a825c6e 100644 --- a/tests/misc/flow-babel-only/__snapshots__/jsfmt.spec.js.snap +++ b/tests/misc/flow-babel-only/__snapshots__/jsfmt.spec.js.snap @@ -1,5 +1,19 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`async-arrow-invalid.js format 1`] = ` +====================================options===================================== +parsers: ["babel"] +printWidth: 80 + | printWidth +=====================================input====================================== + async () => {} + +=====================================output===================================== +async () => {}; + +================================================================================ +`; + exports[`class_with_generics.js format 1`] = ` ====================================options===================================== parsers: ["babel"] diff --git a/tests/misc/flow-babel-only/async-arrow-invalid.js b/tests/misc/flow-babel-only/async-arrow-invalid.js new file mode 100644 index 000000000000..0476a2922990 --- /dev/null +++ b/tests/misc/flow-babel-only/async-arrow-invalid.js @@ -0,0 +1 @@ + async () => {} From 854678a83ab0687971b19761df365909b5db9e28 Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 1 Sep 2020 14:50:56 +0800 Subject: [PATCH 6/8] Test `in` https://github.com/babel/babel/pull/11931 --- tests/misc/errors/js/__snapshots__/jsfmt.spec.js.snap | 9 +++++++++ tests/misc/errors/js/no-for-in-init-concise-binary-in.js | 3 +++ 2 files changed, 12 insertions(+) create mode 100644 tests/misc/errors/js/no-for-in-init-concise-binary-in.js diff --git a/tests/misc/errors/js/__snapshots__/jsfmt.spec.js.snap b/tests/misc/errors/js/__snapshots__/jsfmt.spec.js.snap index d5b7068fa497..02535f581236 100644 --- a/tests/misc/errors/js/__snapshots__/jsfmt.spec.js.snap +++ b/tests/misc/errors/js/__snapshots__/jsfmt.spec.js.snap @@ -18,6 +18,15 @@ exports[`module-attributes.js error test 1`] = ` 2 | " `; +exports[`no-for-in-init-concise-binary-in.js error test 1`] = ` +"Unexpected token, expected \\")\\" (3:18) + 1 | // https://github.com/babel/babel/pull/11931 + 2 | +> 3 | for (() => x in y;;); + | ^ + 4 | " +`; + exports[`partial-template-strings.js error test 1`] = ` "Unexpected token (6:42) 4 | diff --git a/tests/misc/errors/js/no-for-in-init-concise-binary-in.js b/tests/misc/errors/js/no-for-in-init-concise-binary-in.js new file mode 100644 index 000000000000..a5ede557702f --- /dev/null +++ b/tests/misc/errors/js/no-for-in-init-concise-binary-in.js @@ -0,0 +1,3 @@ +// https://github.com/babel/babel/pull/11931 + +for (() => x in y;;); From f3f6d0dc704f9ef584f6d6a76a2830cc0ca72c9a Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 1 Sep 2020 15:02:31 +0800 Subject: [PATCH 7/8] Add ref link --- tests/misc/errors/flow/__snapshots__/jsfmt.spec.js.snap | 7 ++++--- tests/misc/errors/flow/async-arrow-invalid.js | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/misc/errors/flow/__snapshots__/jsfmt.spec.js.snap b/tests/misc/errors/flow/__snapshots__/jsfmt.spec.js.snap index fa12c2728b40..1055035e425e 100644 --- a/tests/misc/errors/flow/__snapshots__/jsfmt.spec.js.snap +++ b/tests/misc/errors/flow/__snapshots__/jsfmt.spec.js.snap @@ -1,9 +1,10 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`async-arrow-invalid.js error test 1`] = ` -"Unexpected token ILLEGAL (2:1) - 1 | async () => {} -> 2 | +"Unexpected token ILLEGAL (4:1) + 2 | + 3 | async () => {} +> 4 | | ^" `; diff --git a/tests/misc/errors/flow/async-arrow-invalid.js b/tests/misc/errors/flow/async-arrow-invalid.js index 0476a2922990..00642f400118 100644 --- a/tests/misc/errors/flow/async-arrow-invalid.js +++ b/tests/misc/errors/flow/async-arrow-invalid.js @@ -1 +1,3 @@ +// https://github.com/babel/babel/pull/11979 + async () => {} From 4c4e5898c760ce9d986b07d95e324c30ce094b2a Mon Sep 17 00:00:00 2001 From: fisker Date: Tue, 1 Sep 2020 17:56:19 +0800 Subject: [PATCH 8/8] Throw `FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction` --- src/language-js/parser-babel.js | 10 +++++++--- .../__snapshots__/jsfmt.spec.js.snap | 19 +++++++++++++++++++ .../errors/babel-flow/async-arrow-invalid.js | 3 +++ tests/misc/errors/babel-flow/jsfmt.spec.js | 2 ++ .../__snapshots__/jsfmt.spec.js.snap | 14 -------------- .../flow-babel-only/async-arrow-invalid.js | 1 - 6 files changed, 31 insertions(+), 18 deletions(-) create mode 100644 tests/misc/errors/babel-flow/__snapshots__/jsfmt.spec.js.snap create mode 100644 tests/misc/errors/babel-flow/async-arrow-invalid.js create mode 100644 tests/misc/errors/babel-flow/jsfmt.spec.js delete mode 100644 tests/misc/flow-babel-only/async-arrow-invalid.js diff --git a/src/language-js/parser-babel.js b/src/language-js/parser-babel.js index 563e8bb89b3b..8f43d5af634d 100644 --- a/src/language-js/parser-babel.js +++ b/src/language-js/parser-babel.js @@ -1,6 +1,5 @@ "use strict"; -const { ErrorMessages } = require("@babel/parser/lib/parser/error-message"); const createError = require("../common/parser-create-error"); const { getNextNonSpaceNonCommentCharacterIndexWithStartIndex, @@ -165,10 +164,15 @@ function tryCombinations(fn, combinations) { } const messagesShouldThrow = new Set([ - // `TSErrors.UnexpectedTypeAnnotation` not exported + // TSErrors.UnexpectedTypeAnnotation // https://github.com/babel/babel/blob/008fe25ae22e78288fbc637d41069bb4a1040987/packages/babel-parser/src/plugins/typescript/index.js#L95 "Did not expect a type annotation here.", - ErrorMessages.ModuleAttributeDifferentFromType, + // ErrorMessages.ModuleAttributeDifferentFromType + // https://github.com/babel/babel/blob/a023b6456cac4505096028f91c5b78829955bfc2/packages/babel-parser/src/parser/error-message.js#L92 + "The only accepted module attribute is `type`", + // FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction + // https://github.com/babel/babel/blob/a023b6456cac4505096028f91c5b78829955bfc2/packages/babel-parser/src/plugins/flow.js#L118 + "Type parameters must come after the async keyword, e.g. instead of ` async () => {}`, use `async () => {}`", ]); function shouldRethrow(error) { diff --git a/tests/misc/errors/babel-flow/__snapshots__/jsfmt.spec.js.snap b/tests/misc/errors/babel-flow/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 000000000000..d3842ea9e109 --- /dev/null +++ b/tests/misc/errors/babel-flow/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,19 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`async-arrow-invalid.js error test 1`] = ` +"Type parameters must come after the async keyword, e.g. instead of \` async (3:1) + 1 | // https://github.com/babel/babel/pull/11979 + 2 | +> 3 | async () => {} + | ^ + 4 | " +`; + +exports[`async-arrow-invalid.js error test 2`] = ` +"Type parameters must come after the async keyword, e.g. instead of \` async (3:1) + 1 | // https://github.com/babel/babel/pull/11979 + 2 | +> 3 | async () => {} + | ^ + 4 | " +`; diff --git a/tests/misc/errors/babel-flow/async-arrow-invalid.js b/tests/misc/errors/babel-flow/async-arrow-invalid.js new file mode 100644 index 000000000000..00642f400118 --- /dev/null +++ b/tests/misc/errors/babel-flow/async-arrow-invalid.js @@ -0,0 +1,3 @@ +// https://github.com/babel/babel/pull/11979 + + async () => {} diff --git a/tests/misc/errors/babel-flow/jsfmt.spec.js b/tests/misc/errors/babel-flow/jsfmt.spec.js new file mode 100644 index 000000000000..2ecb070a2e5f --- /dev/null +++ b/tests/misc/errors/babel-flow/jsfmt.spec.js @@ -0,0 +1,2 @@ +run_spec(__dirname, ["babel-flow"]); +run_spec(__dirname, ["babel"]); diff --git a/tests/misc/flow-babel-only/__snapshots__/jsfmt.spec.js.snap b/tests/misc/flow-babel-only/__snapshots__/jsfmt.spec.js.snap index 3fd70a825c6e..1f242e9e945b 100644 --- a/tests/misc/flow-babel-only/__snapshots__/jsfmt.spec.js.snap +++ b/tests/misc/flow-babel-only/__snapshots__/jsfmt.spec.js.snap @@ -1,19 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`async-arrow-invalid.js format 1`] = ` -====================================options===================================== -parsers: ["babel"] -printWidth: 80 - | printWidth -=====================================input====================================== - async () => {} - -=====================================output===================================== -async () => {}; - -================================================================================ -`; - exports[`class_with_generics.js format 1`] = ` ====================================options===================================== parsers: ["babel"] diff --git a/tests/misc/flow-babel-only/async-arrow-invalid.js b/tests/misc/flow-babel-only/async-arrow-invalid.js deleted file mode 100644 index 0476a2922990..000000000000 --- a/tests/misc/flow-babel-only/async-arrow-invalid.js +++ /dev/null @@ -1 +0,0 @@ - async () => {}