From 230bba53a9f71bc7e22923b0f10d605bb67411f0 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Tue, 27 May 2025 10:46:57 +0800 Subject: [PATCH] Forbid new line before arrow (#17516) --- src/language-js/parse/babel.js | 1 - .../__snapshots__/format.test.js.snap | 51 ------------ .../newline-before-arrow/format.test.js | 8 -- .../__snapshots__/format.test.js.snap | 80 +++++++++++++++++++ .../js/newline-before-arrow/format.test.js | 11 +++ .../newline-before-arrow.js | 0 6 files changed, 91 insertions(+), 60 deletions(-) delete mode 100644 tests/format/js/arrows/newline-before-arrow/__snapshots__/format.test.js.snap delete mode 100644 tests/format/js/arrows/newline-before-arrow/format.test.js create mode 100644 tests/format/misc/errors/js/newline-before-arrow/__snapshots__/format.test.js.snap create mode 100644 tests/format/misc/errors/js/newline-before-arrow/format.test.js rename tests/format/{js/arrows => misc/errors/js}/newline-before-arrow/newline-before-arrow.js (100%) diff --git a/src/language-js/parse/babel.js b/src/language-js/parse/babel.js index 894c8c58b..312c328e7 100644 --- a/src/language-js/parse/babel.js +++ b/src/language-js/parse/babel.js @@ -187,7 +187,6 @@ const allowedReasonCodes = new Set([ "UnterminatedJsxContent", "UnexpectedReservedWord", "ModuleAttributesWithDuplicateKeys", - "LineTerminatorBeforeArrow", "InvalidEscapeSequenceTemplate", "NonAbstractClassHasAbstractMethod", "OptionalTypeBeforeRequired", diff --git a/tests/format/js/arrows/newline-before-arrow/__snapshots__/format.test.js.snap b/tests/format/js/arrows/newline-before-arrow/__snapshots__/format.test.js.snap deleted file mode 100644 index a9553bd32..000000000 --- a/tests/format/js/arrows/newline-before-arrow/__snapshots__/format.test.js.snap +++ /dev/null @@ -1,51 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`newline-before-arrow.js [acorn] format 1`] = ` -"Unexpected token (2:1) - 1 | async x -> 2 | => x - | ^ - 3 | -Cause: Unexpected token (2:0)" -`; - -exports[`newline-before-arrow.js [espree] format 1`] = ` -"Unexpected token => (2:1) - 1 | async x -> 2 | => x - | ^ - 3 | -Cause: Unexpected token =>" -`; - -exports[`newline-before-arrow.js [meriyah] format 1`] = ` -"No line break is allowed after '=>' (2:1) - 1 | async x -> 2 | => x - | ^^ - 3 | -Cause: [2:0-2:2]: No line break is allowed after '=>'" -`; - -exports[`newline-before-arrow.js [oxc] format 1`] = ` -"Line terminator not permitted before arrow (2:1) - 1 | async x -> 2 | => x - | ^^ - 3 |" -`; - -exports[`newline-before-arrow.js format 1`] = ` -====================================options===================================== -parsers: ["babel"] -printWidth: 80 - | printWidth -=====================================input====================================== -async x -=> x - -=====================================output===================================== -async (x) => x; - -================================================================================ -`; diff --git a/tests/format/js/arrows/newline-before-arrow/format.test.js b/tests/format/js/arrows/newline-before-arrow/format.test.js deleted file mode 100644 index ac9301599..000000000 --- a/tests/format/js/arrows/newline-before-arrow/format.test.js +++ /dev/null @@ -1,8 +0,0 @@ -runFormatTest(import.meta, ["babel"], { - errors: { - acorn: ["newline-before-arrow.js"], - espree: ["newline-before-arrow.js"], - meriyah: ["newline-before-arrow.js"], - oxc: ["newline-before-arrow.js"], - }, -}); diff --git a/tests/format/misc/errors/js/newline-before-arrow/__snapshots__/format.test.js.snap b/tests/format/misc/errors/js/newline-before-arrow/__snapshots__/format.test.js.snap new file mode 100644 index 000000000..41c61f39c --- /dev/null +++ b/tests/format/misc/errors/js/newline-before-arrow/__snapshots__/format.test.js.snap @@ -0,0 +1,80 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`newline-before-arrow.js [acorn] format 1`] = ` +"Unexpected token (2:1) + 1 | async x +> 2 | => x + | ^ + 3 | +Cause: Unexpected token (2:0)" +`; + +exports[`newline-before-arrow.js [babel] format 1`] = ` +"No line break is allowed before '=>'. (2:3) + 1 | async x +> 2 | => x + | ^ + 3 | +Cause: No line break is allowed before '=>'. (2:2)" +`; + +exports[`newline-before-arrow.js [babel-ts] format 1`] = ` +"No line break is allowed before '=>'. (2:3) + 1 | async x +> 2 | => x + | ^ + 3 | +Cause: No line break is allowed before '=>'. (2:2)" +`; + +exports[`newline-before-arrow.js [babel-ts] format 2`] = ` +"No line break is allowed before '=>'. (2:3) + 1 | async x +> 2 | => x + | ^ + 3 | +Cause: No line break is allowed before '=>'. (2:2)" +`; + +exports[`newline-before-arrow.js [espree] format 1`] = ` +"Unexpected token => (2:1) + 1 | async x +> 2 | => x + | ^ + 3 | +Cause: Unexpected token =>" +`; + +exports[`newline-before-arrow.js [flow] format 1`] = ` +"Illegal newline before arrow (2:1) + 1 | async x +> 2 | => x + | ^^ + 3 |" +`; + +exports[`newline-before-arrow.js [meriyah] format 1`] = ` +"No line break is allowed after '=>' (2:1) + 1 | async x +> 2 | => x + | ^^ + 3 | +Cause: [2:0-2:2]: No line break is allowed after '=>'" +`; + +exports[`newline-before-arrow.js [oxc] format 1`] = ` +"Line terminator not permitted before arrow (2:1) + 1 | async x +> 2 | => x + | ^^ + 3 |" +`; + +exports[`newline-before-arrow.js [typescript] format 1`] = ` +"Unexpected keyword or identifier. (1:1) +> 1 | async x + | ^ + 2 | => x + 3 | +Cause: Unexpected keyword or identifier." +`; diff --git a/tests/format/misc/errors/js/newline-before-arrow/format.test.js b/tests/format/misc/errors/js/newline-before-arrow/format.test.js new file mode 100644 index 000000000..c72ea76ae --- /dev/null +++ b/tests/format/misc/errors/js/newline-before-arrow/format.test.js @@ -0,0 +1,11 @@ +runFormatTest(import.meta, [ + "babel", + "typescript", + "flow", + "babel-ts", + "acorn", + "espree", + "meriyah", + "babel-ts", + "oxc", +]); diff --git a/tests/format/js/arrows/newline-before-arrow/newline-before-arrow.js b/tests/format/misc/errors/js/newline-before-arrow/newline-before-arrow.js similarity index 100% rename from tests/format/js/arrows/newline-before-arrow/newline-before-arrow.js rename to tests/format/misc/errors/js/newline-before-arrow/newline-before-arrow.js