diff --git a/src/language-js/parser-babel.js b/src/language-js/parser-babel.js index 0d503c83cfe6..24c9d02961f2 100644 --- a/src/language-js/parser-babel.js +++ b/src/language-js/parser-babel.js @@ -150,11 +150,6 @@ const allowedMessages = new Set([ "'with' in strict mode", "Legacy octal literals are not allowed in strict mode", - "Invalid left-hand side in parenthesized expression", - "Invalid left-hand side in assignment expression", - "Invalid left-hand side in postfix operation", - "Invalid left-hand side in prefix operation", - "Type argument list cannot be empty.", "Type parameter list cannot be empty.", "Type parameters cannot appear on a constructor declaration.", @@ -185,7 +180,6 @@ const allowedMessages = new Set([ "Unexpected trailing comma after rest element", "Decorators cannot be used to decorate parameters", "Unterminated JSX contents", - "Invalid parenthesized assignment pattern", 'Unexpected token, expected "}"', "Unexpected token :", "Unexpected reserved word 'package'", diff --git a/tests/js/logical-assignment/__snapshots__/jsfmt.spec.js.snap b/tests/js/logical-assignment/__snapshots__/jsfmt.spec.js.snap index 8155473c99a2..93320616ac26 100644 --- a/tests/js/logical-assignment/__snapshots__/jsfmt.spec.js.snap +++ b/tests/js/logical-assignment/__snapshots__/jsfmt.spec.js.snap @@ -1,33 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`invalid.js [espree] format 1`] = ` -"Assigning to rvalue (1:21) -> 1 | c.foo.bar().baz ??= result.foo.bar().baz(a.baz) &&= result.baz; - | ^ - 2 |" -`; - -exports[`invalid.js [meriyah] format 1`] = ` -"[1:51]: Invalid left-hand side in assignment (1:51) -> 1 | c.foo.bar().baz ??= result.foo.bar().baz(a.baz) &&= result.baz; - | ^ - 2 |" -`; - -exports[`invalid.js format 1`] = ` -====================================options===================================== -parsers: ["babel", "typescript"] -printWidth: 80 - | printWidth -=====================================input====================================== -c.foo.bar().baz ??= result.foo.bar().baz(a.baz) &&= result.baz; - -=====================================output===================================== -c.foo.bar().baz ??= result.foo.bar().baz(a.baz) &&= result.baz; - -================================================================================ -`; - exports[`logical-assignment.js format 1`] = ` ====================================options===================================== parsers: ["babel", "typescript"] diff --git a/tests/js/logical-assignment/invalid.js b/tests/js/logical-assignment/invalid.js deleted file mode 100644 index 55c85a336d5c..000000000000 --- a/tests/js/logical-assignment/invalid.js +++ /dev/null @@ -1 +0,0 @@ -c.foo.bar().baz ??= result.foo.bar().baz(a.baz) &&= result.baz; diff --git a/tests/js/logical-assignment/jsfmt.spec.js b/tests/js/logical-assignment/jsfmt.spec.js index 35c487da3d8e..858ac91aadcc 100644 --- a/tests/js/logical-assignment/jsfmt.spec.js +++ b/tests/js/logical-assignment/jsfmt.spec.js @@ -1,3 +1 @@ -run_spec(__dirname, ["babel", "typescript"], { - errors: { espree: ["invalid.js"], meriyah: ["invalid.js"] }, -}); +run_spec(__dirname, ["babel", "typescript"]); diff --git a/tests/misc/errors/invalid/__snapshots__/jsfmt.spec.js.snap b/tests/misc/errors/invalid/__snapshots__/jsfmt.spec.js.snap index 8200a92ddca4..89008129044b 100644 --- a/tests/misc/errors/invalid/__snapshots__/jsfmt.spec.js.snap +++ b/tests/misc/errors/invalid/__snapshots__/jsfmt.spec.js.snap @@ -6,18 +6,36 @@ exports[`snippet: #0 [babel] format 1`] = ` | ^" `; +exports[`snippet: #0 [babel] format 2`] = ` +"Invalid parenthesized assignment pattern (1:1) +> 1 | (a = b) = 1 + | ^" +`; + exports[`snippet: #0 [babel-flow] format 1`] = ` "Unexpected token, expected \\"(\\" (1:5) > 1 | for each (a in b) {} | ^" `; +exports[`snippet: #0 [babel-flow] format 2`] = ` +"Invalid parenthesized assignment pattern (1:1) +> 1 | (a = b) = 1 + | ^" +`; + exports[`snippet: #0 [babel-ts] format 1`] = ` "Unexpected token, expected \\"(\\" (1:5) > 1 | for each (a in b) {} | ^" `; +exports[`snippet: #0 [babel-ts] format 2`] = ` +"Invalid parenthesized assignment pattern (1:1) +> 1 | (a = b) = 1 + | ^" +`; + exports[`snippet: #0 [espree] format 1`] = ` "Unexpected token each (1:5) > 1 | for each (a in b) {} @@ -30,12 +48,24 @@ exports[`snippet: #0 [flow] format 1`] = ` | ^^^^" `; +exports[`snippet: #0 [flow] format 2`] = ` +"Invalid left-hand side in assignment (1:2) +> 1 | (a = b) = 1 + | ^^^^^" +`; + exports[`snippet: #0 [meriyah] format 1`] = ` "[1:8]: Expected '(' (1:8) > 1 | for each (a in b) {} | ^" `; +exports[`snippet: #0 [meriyah] format 2`] = ` +"[1:9]: Invalid left-hand side in assignment (1:9) +> 1 | (a = b) = 1 + | ^" +`; + exports[`snippet: #0 [typescript] format 1`] = ` "'(' expected. (1:5) > 1 | for each (a in b) {} @@ -48,18 +78,36 @@ exports[`snippet: #1 [babel] format 1`] = ` | ^" `; +exports[`snippet: #1 [babel] format 2`] = ` +"Invalid left-hand side in assignment expression (1:5) +> 1 | a = 1 = 2 + | ^" +`; + exports[`snippet: #1 [babel-flow] format 1`] = ` "A class name is required (1:7) > 1 | class switch() {} | ^" `; +exports[`snippet: #1 [babel-flow] format 2`] = ` +"Invalid left-hand side in assignment expression (1:5) +> 1 | a = 1 = 2 + | ^" +`; + exports[`snippet: #1 [babel-ts] format 1`] = ` "A class name is required (1:7) > 1 | class switch() {} | ^" `; +exports[`snippet: #1 [babel-ts] format 2`] = ` +"Invalid left-hand side in assignment expression (1:5) +> 1 | a = 1 = 2 + | ^" +`; + exports[`snippet: #1 [espree] format 1`] = ` "Unexpected token switch (1:7) > 1 | class switch() {} @@ -72,14 +120,116 @@ exports[`snippet: #1 [flow] format 1`] = ` | ^^^^^^" `; +exports[`snippet: #1 [flow] format 2`] = ` +"Invalid left-hand side in assignment (1:5) +> 1 | a = 1 = 2 + | ^" +`; + exports[`snippet: #1 [meriyah] format 1`] = ` "[1:12]: Unexpected strict mode reserved word (1:12) > 1 | class switch() {} | ^" `; +exports[`snippet: #1 [meriyah] format 2`] = ` +"[1:7]: Invalid left-hand side in assignment (1:7) +> 1 | a = 1 = 2 + | ^" +`; + exports[`snippet: #1 [typescript] format 1`] = ` "'{' expected. (1:7) > 1 | class switch() {} | ^" `; + +exports[`snippet: #2 [babel] format 1`] = ` +"Invalid parenthesized assignment pattern (1:1) +> 1 | (a = 1) = 2 + | ^" +`; + +exports[`snippet: #2 [babel-flow] format 1`] = ` +"Invalid parenthesized assignment pattern (1:1) +> 1 | (a = 1) = 2 + | ^" +`; + +exports[`snippet: #2 [babel-ts] format 1`] = ` +"Invalid parenthesized assignment pattern (1:1) +> 1 | (a = 1) = 2 + | ^" +`; + +exports[`snippet: #2 [flow] format 1`] = ` +"Invalid left-hand side in assignment (1:2) +> 1 | (a = 1) = 2 + | ^^^^^" +`; + +exports[`snippet: #2 [meriyah] format 1`] = ` +"[1:9]: Invalid left-hand side in assignment (1:9) +> 1 | (a = 1) = 2 + | ^" +`; + +exports[`snippet: #3 [babel] format 1`] = ` +"Invalid parenthesized assignment pattern (1:1) +> 1 | (a += b) = 1 + | ^" +`; + +exports[`snippet: #3 [babel-flow] format 1`] = ` +"Invalid parenthesized assignment pattern (1:1) +> 1 | (a += b) = 1 + | ^" +`; + +exports[`snippet: #3 [babel-ts] format 1`] = ` +"Invalid parenthesized assignment pattern (1:1) +> 1 | (a += b) = 1 + | ^" +`; + +exports[`snippet: #3 [flow] format 1`] = ` +"Invalid left-hand side in assignment (1:2) +> 1 | (a += b) = 1 + | ^^^^^^" +`; + +exports[`snippet: #3 [meriyah] format 1`] = ` +"[1:10]: Invalid left-hand side in assignment (1:10) +> 1 | (a += b) = 1 + | ^" +`; + +exports[`snippet: #4 [babel] format 1`] = ` +"Invalid left-hand side in parenthesized expression (1:2) +> 1 | (a = b) += 1 + | ^" +`; + +exports[`snippet: #4 [babel-flow] format 1`] = ` +"Invalid left-hand side in parenthesized expression (1:2) +> 1 | (a = b) += 1 + | ^" +`; + +exports[`snippet: #4 [babel-ts] format 1`] = ` +"Invalid left-hand side in parenthesized expression (1:2) +> 1 | (a = b) += 1 + | ^" +`; + +exports[`snippet: #4 [flow] format 1`] = ` +"Invalid left-hand side in assignment (1:2) +> 1 | (a = b) += 1 + | ^^^^^" +`; + +exports[`snippet: #4 [meriyah] format 1`] = ` +"[1:10]: Invalid left-hand side in assignment (1:10) +> 1 | (a = b) += 1 + | ^" +`; diff --git a/tests/misc/errors/invalid/jsfmt.spec.js b/tests/misc/errors/invalid/jsfmt.spec.js index 52247a568ef3..bfb4daddcd2e 100644 --- a/tests/misc/errors/invalid/jsfmt.spec.js +++ b/tests/misc/errors/invalid/jsfmt.spec.js @@ -5,3 +5,26 @@ run_spec( }, ["babel", "flow", "typescript", "babel-flow", "babel-ts", "espree", "meriyah"] ); + +run_spec( + { + dirname: __dirname, + snippets: [ + "(a = b) = 1", + "a = 1 = 2", + "(a = 1) = 2", + "(a += b) = 1", + "(a = b) += 1", + ], + }, + [ + "babel", + "flow", + // "typescript", + "babel-flow", + "babel-ts", + // https://github.com/eslint/espree/issues/470 + // "espree", + "meriyah", + ] +); diff --git a/tests/misc/errors/js/assignment/__snapshots__/jsfmt.spec.js.snap b/tests/misc/errors/js/assignment/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 000000000000..0a7e2a259209 --- /dev/null +++ b/tests/misc/errors/js/assignment/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,25 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`snippet: #0 [babel] format 1`] = ` +"Invalid parenthesized assignment pattern (1:1) +> 1 | ({}) = x; + | ^" +`; + +exports[`snippet: #0 [babel-ts] format 1`] = ` +"Invalid parenthesized assignment pattern (1:1) +> 1 | ({}) = x; + | ^" +`; + +exports[`snippet: #0 [espree] format 1`] = ` +"Parenthesized pattern (1:1) +> 1 | ({}) = x; + | ^" +`; + +exports[`snippet: #0 [meriyah] format 1`] = ` +"[1:6]: Invalid left-hand side in assignment (1:6) +> 1 | ({}) = x; + | ^" +`; diff --git a/tests/misc/errors/js/assignment/jsfmt.spec.js b/tests/misc/errors/js/assignment/jsfmt.spec.js new file mode 100644 index 000000000000..f987b21113fe --- /dev/null +++ b/tests/misc/errors/js/assignment/jsfmt.spec.js @@ -0,0 +1,7 @@ +run_spec( + { + dirname: __dirname, + snippets: ["({}) = x;"], + }, + ["babel", "babel-ts", "espree", "meriyah"] +); diff --git a/tests/typescript/assignment/__snapshots__/jsfmt.spec.js.snap b/tests/typescript/assignment/__snapshots__/jsfmt.spec.js.snap index c2bbfff352a5..21ffd8bcfd40 100644 --- a/tests/typescript/assignment/__snapshots__/jsfmt.spec.js.snap +++ b/tests/typescript/assignment/__snapshots__/jsfmt.spec.js.snap @@ -179,3 +179,27 @@ const firestorePersonallyIdentifiablePaths: Array = ================================================================================ `; + +exports[`parenthesized.ts format 1`] = ` +====================================options===================================== +parsers: ["typescript"] +printWidth: 80 + | printWidth +=====================================input====================================== +// https://github.com/babel/babel/pull/12933/files +(x) = null; +(x!) = null; +(a as any) = null; +(a as number) = 42; +((a as any) as string) = null; + +=====================================output===================================== +// https://github.com/babel/babel/pull/12933/files +(x) = null; +x! = null; +(a as any) = null; +(a as number) = 42; +((a as any) as string) = null; + +================================================================================ +`; diff --git a/tests/typescript/assignment/parenthesized.ts b/tests/typescript/assignment/parenthesized.ts new file mode 100644 index 000000000000..27511999df7d --- /dev/null +++ b/tests/typescript/assignment/parenthesized.ts @@ -0,0 +1,6 @@ +// https://github.com/babel/babel/pull/12933/files +(x) = null; +(x!) = null; +(a as any) = null; +(a as number) = 42; +((a as any) as string) = null; diff --git a/tests/typescript/compiler/__snapshots__/jsfmt.spec.js.snap b/tests/typescript/compiler/__snapshots__/jsfmt.spec.js.snap index dcc0c9258da7..e84aef5a05f4 100644 --- a/tests/typescript/compiler/__snapshots__/jsfmt.spec.js.snap +++ b/tests/typescript/compiler/__snapshots__/jsfmt.spec.js.snap @@ -325,6 +325,17 @@ module T.U { ================================================================================ `; +exports[`decrementAndIncrementOperators.ts [babel-ts] format 1`] = ` +"Invalid left-hand side in postfix operation (4:1) + 2 | + 3 | // errors +> 4 | 1 ++; + | ^ + 5 | + 6 | (1)++; + 7 | (1)--;" +`; + exports[`decrementAndIncrementOperators.ts format 1`] = ` ====================================options===================================== parsers: ["typescript"] diff --git a/tests/typescript/compiler/jsfmt.spec.js b/tests/typescript/compiler/jsfmt.spec.js index 100380aa1e7b..5e276b1c256a 100644 --- a/tests/typescript/compiler/jsfmt.spec.js +++ b/tests/typescript/compiler/jsfmt.spec.js @@ -3,6 +3,7 @@ run_spec(__dirname, ["typescript"], { "babel-ts": [ "downlevelLetConst1.ts", "errorOnInitializerInInterfaceProperty.ts", + "decrementAndIncrementOperators.ts", ], }, });