diff --git a/changelog_unreleased/javascript/12567.md b/changelog_unreleased/javascript/12567.md new file mode 100644 index 000000000000..4e3b7a8d9a56 --- /dev/null +++ b/changelog_unreleased/javascript/12567.md @@ -0,0 +1,23 @@ +#### Update `meriyah` to fix several bugs (#12567 by @fisker, fixes in [`meriyah`](https://github.com/meriyah/meriyah/) by @3cp) + +Fixes bugs when parsing following valid code: + +```js +foo(await bar()); +``` + +```js +const regex = /.*/ms; +``` + +```js +const element =

{/w/.test(s)}

; +``` + +```js +class A extends B { + #privateMethod() { + super.method(); + } +} +``` diff --git a/package.json b/package.json index c0b782bcabd2..7a7339dc1b42 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "linguist-languages": "7.15.0", "lodash": "4.17.21", "mem": "9.0.2", - "meriyah": "4.2.0", + "meriyah": "4.2.1", "micromatch": "4.0.5", "minimist": "1.2.6", "n-readlines": "1.0.1", diff --git a/tests/format/js/classes/__snapshots__/jsfmt.spec.js.snap b/tests/format/js/classes/__snapshots__/jsfmt.spec.js.snap index fbcbf12d7136..0587ffe17f9e 100644 --- a/tests/format/js/classes/__snapshots__/jsfmt.spec.js.snap +++ b/tests/format/js/classes/__snapshots__/jsfmt.spec.js.snap @@ -325,6 +325,28 @@ class B { ================================================================================ `; +exports[`super.js format 1`] = ` +====================================options===================================== +parsers: ["babel", "flow", "typescript"] +printWidth: 80 + | printWidth +=====================================input====================================== +class A extends B { + #a() { + super.x(); + } +} + +=====================================output===================================== +class A extends B { + #a() { + super.x(); + } +} + +================================================================================ +`; + exports[`ternary.js format 1`] = ` ====================================options===================================== parsers: ["babel", "flow", "typescript"] diff --git a/tests/format/js/classes/super.js b/tests/format/js/classes/super.js new file mode 100644 index 000000000000..03eadf541756 --- /dev/null +++ b/tests/format/js/classes/super.js @@ -0,0 +1,5 @@ +class A extends B { + #a() { + super.x(); + } +} diff --git a/tests/format/js/regex/__snapshots__/jsfmt.spec.js.snap b/tests/format/js/regex/__snapshots__/jsfmt.spec.js.snap index 3413b6890051..aa295e37c9e7 100644 --- a/tests/format/js/regex/__snapshots__/jsfmt.spec.js.snap +++ b/tests/format/js/regex/__snapshots__/jsfmt.spec.js.snap @@ -28,6 +28,22 @@ printWidth: 80 ================================================================================ `; +exports[`multiple-flags.js format 1`] = ` +====================================options===================================== +parsers: ["babel", "flow", "typescript"] +printWidth: 80 + | printWidth +=====================================input====================================== +/.*/ms; +/.*/my; + +=====================================output===================================== +/.*/ms; +/.*/my; + +================================================================================ +`; + exports[`test.js format 1`] = ` ====================================options===================================== parsers: ["babel", "flow", "typescript"] diff --git a/tests/format/js/regex/multiple-flags.js b/tests/format/js/regex/multiple-flags.js new file mode 100644 index 000000000000..f5a04f859c24 --- /dev/null +++ b/tests/format/js/regex/multiple-flags.js @@ -0,0 +1,2 @@ +/.*/ms; +/.*/my; diff --git a/tests/format/js/top-level-await/__snapshots__/jsfmt.spec.js.snap b/tests/format/js/top-level-await/__snapshots__/jsfmt.spec.js.snap index 04b2cd75cf92..249b632a6672 100644 --- a/tests/format/js/top-level-await/__snapshots__/jsfmt.spec.js.snap +++ b/tests/format/js/top-level-await/__snapshots__/jsfmt.spec.js.snap @@ -13,3 +13,19 @@ await something(); ================================================================================ `; + +exports[`in-expression.js format 1`] = ` +====================================options===================================== +parsers: ["babel", "typescript"] +printWidth: 80 + | printWidth +=====================================input====================================== +call( +await something() +) + +=====================================output===================================== +call(await something()); + +================================================================================ +`; diff --git a/tests/format/js/top-level-await/in-expression.js b/tests/format/js/top-level-await/in-expression.js new file mode 100644 index 000000000000..d70f915226c0 --- /dev/null +++ b/tests/format/js/top-level-await/in-expression.js @@ -0,0 +1,3 @@ +call( +await something() +) diff --git a/tests/format/jsx/jsx/__snapshots__/jsfmt.spec.js.snap b/tests/format/jsx/jsx/__snapshots__/jsfmt.spec.js.snap index 764b7cf2eb4b..e8776bdc005d 100644 --- a/tests/format/jsx/jsx/__snapshots__/jsfmt.spec.js.snap +++ b/tests/format/jsx/jsx/__snapshots__/jsfmt.spec.js.snap @@ -5076,6 +5076,94 @@ singleQuote: true ================================================================================ `; +exports[`regex.js - {"singleQuote":false,"jsxSingleQuote":false} format 1`] = ` +====================================options===================================== +jsxSingleQuote: false +parsers: ["flow", "babel", "typescript"] +printWidth: 80 +singleQuote: false + | printWidth +=====================================input====================================== +x =
one
,
two
; +x = {} +x = {1/2} +x = {/w/.test(s)} + +=====================================output===================================== +(x =
one
), (
two
); +x = {}; +x = {1 / 2}; +x = {/w/.test(s)}; + +================================================================================ +`; + +exports[`regex.js - {"singleQuote":false,"jsxSingleQuote":true} format 1`] = ` +====================================options===================================== +jsxSingleQuote: true +parsers: ["flow", "babel", "typescript"] +printWidth: 80 +singleQuote: false + | printWidth +=====================================input====================================== +x =
one
,
two
; +x = {} +x = {1/2} +x = {/w/.test(s)} + +=====================================output===================================== +(x =
one
), (
two
); +x = {}; +x = {1 / 2}; +x = {/w/.test(s)}; + +================================================================================ +`; + +exports[`regex.js - {"singleQuote":true,"jsxSingleQuote":false} format 1`] = ` +====================================options===================================== +jsxSingleQuote: false +parsers: ["flow", "babel", "typescript"] +printWidth: 80 +singleQuote: true + | printWidth +=====================================input====================================== +x =
one
,
two
; +x = {} +x = {1/2} +x = {/w/.test(s)} + +=====================================output===================================== +(x =
one
), (
two
); +x = {}; +x = {1 / 2}; +x = {/w/.test(s)}; + +================================================================================ +`; + +exports[`regex.js - {"singleQuote":true,"jsxSingleQuote":true} format 1`] = ` +====================================options===================================== +jsxSingleQuote: true +parsers: ["flow", "babel", "typescript"] +printWidth: 80 +singleQuote: true + | printWidth +=====================================input====================================== +x =
one
,
two
; +x = {} +x = {1/2} +x = {/w/.test(s)} + +=====================================output===================================== +(x =
one
), (
two
); +x = {}; +x = {1 / 2}; +x = {/w/.test(s)}; + +================================================================================ +`; + exports[`return-statement.js - {"singleQuote":false,"jsxSingleQuote":false} format 1`] = ` ====================================options===================================== jsxSingleQuote: false diff --git a/tests/format/jsx/jsx/regex.js b/tests/format/jsx/jsx/regex.js new file mode 100644 index 000000000000..9f92918c6872 --- /dev/null +++ b/tests/format/jsx/jsx/regex.js @@ -0,0 +1,4 @@ +x =
one
,
two
; +x = {} +x = {1/2} +x = {/w/.test(s)} diff --git a/yarn.lock b/yarn.lock index 4c944df49d23..ab96c6c909f2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4834,10 +4834,10 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -meriyah@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/meriyah/-/meriyah-4.2.0.tgz#29d28c37ac7b67f8b9aaa92df0b8ac12469fe98b" - integrity sha512-fCVh5GB9YT53Bq14l00HLYE3i9DywrY0JVZxbk0clXWDuMsUKKwluvC5sY0bMBqHbnIbpIjfSSIsnrzbauA8Yw== +meriyah@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/meriyah/-/meriyah-4.2.1.tgz#2a5c9ac2f4a16673afa31af1266ce491a8973bb4" + integrity sha512-Uv5sWsmjFNC6IszEmHo5bzJLL+kqjQ/VrEj9Agqsqtx7B6dcxHnHLew1ioJD19HNXrxrRZltPi+NVh12I8RLXA== micromatch@4.0.5, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5"