diff options
author | 2022-11-07 21:41:07 -0800 | |
---|---|---|
committer | 2022-11-07 21:43:38 -0800 | |
commit | bb8c803bdff17a7045daeb4c7b1f7b7b0df35e41 (patch) | |
tree | 77a1ad7d269265d8340706ac59352f2587951646 | |
parent | 9d167deb1091ea067a43c910185b1667149151bd (diff) | |
download | bun-bb8c803bdff17a7045daeb4c7b1f7b7b0df35e41.tar.gz bun-bb8c803bdff17a7045daeb4c7b1f7b7b0df35e41.tar.zst bun-bb8c803bdff17a7045daeb4c7b1f7b7b0df35e41.zip |
Fix newline normalization
credit: @Validark
Diffstat (limited to '')
-rw-r--r-- | src/js_lexer.zig | 11 | ||||
-rw-r--r-- | test/bun.js/transpiler.test.js | 7 |
2 files changed, 13 insertions, 5 deletions
diff --git a/src/js_lexer.zig b/src/js_lexer.zig index da186eaf4..134497421 100644 --- a/src/js_lexer.zig +++ b/src/js_lexer.zig @@ -280,7 +280,8 @@ fn NewLexer_( // include a <CR> or <CR><LF> sequence. // Convert '\r\n' into '\n' - iter.i += @as(u32, @boolToInt(iter.i < text.len and text[iter.i] == '\n')); + const next_i: usize = iter.i + 1; + iter.i += @as(u32, @boolToInt(next_i < text.len and text[next_i] == '\n')); // Convert '\r' into '\n' buf.append('\n') catch unreachable; @@ -546,11 +547,11 @@ fn NewLexer_( try lexer.syntaxError(); } + // Make sure Windows CRLF counts as a single newline + const next_i: usize = iter.i + 1; + iter.i += @as(u32, @boolToInt(next_i < text.len and text[next_i] == '\n')); + // Ignore line continuations. A line continuation is not an escaped newline. - if (iter.i < text.len and text[iter.i + 1] == '\n') { - // Make sure Windows CRLF counts as a single newline - iter.i += 1; - } continue; }, '\n', 0x2028, 0x2029 => { diff --git a/test/bun.js/transpiler.test.js b/test/bun.js/transpiler.test.js index f8bbd9d44..d34b43330 100644 --- a/test/bun.js/transpiler.test.js +++ b/test/bun.js/transpiler.test.js @@ -65,6 +65,13 @@ describe("Bun.Transpiler", () => { }, }; + it("normalizes \\r\\n", () => { + ts.expectPrinted_( + "console.log(`\r\n\r\n\r\n`)", + "console.log(`\n\n\n`);\n" + ); + }); + describe("TypeScript", () => { it("import Foo = Baz.Bar", () => { ts.expectPrinted_( |