From 178198be04b85db997f4ec87dfb6265a2312528f Mon Sep 17 00:00:00 2001 From: Nicole <66326869+iinicole@users.noreply.github.com> Date: Tue, 18 Apr 2023 12:57:52 -0400 Subject: [PATCH] Fix 53482 : Preserve newline/space behavior (#53732) Co-authored-by: Andrew Branch --- src/compiler/emitter.ts | 5 +- tests/cases/fourslash/preserveSpace.ts | 84 ++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/preserveSpace.ts diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 16d111d3659..4b8bc84baad 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4875,7 +4875,10 @@ export function createPrinter(printerOptions: PrinterOptions = {}, handlers: Pri } function emitEmbeddedStatement(parent: Node, node: Statement) { - if (isBlock(node) || getEmitFlags(parent) & EmitFlags.SingleLine) { + if (isBlock(node) || + getEmitFlags(parent) & EmitFlags.SingleLine || + preserveSourceNewlines && !getLeadingLineTerminatorCount(parent, node, ListFormat.None) + ) { writeSpace(); emit(node); } diff --git a/tests/cases/fourslash/preserveSpace.ts b/tests/cases/fourslash/preserveSpace.ts new file mode 100644 index 00000000000..f3d456176e2 --- /dev/null +++ b/tests/cases/fourslash/preserveSpace.ts @@ -0,0 +1,84 @@ +/// + +////function foo() { +//// /*1*/if (true) console.log(1); +//// else console.log(1); +//// if (true) +//// console.log(1); +//// else +//// console.log(1); +//// +//// do console.log(1); +//// while (false); +//// do +//// console.log(1); +//// while (false); +//// +//// while (true) console.log(1); +//// while (true) +//// console.log(1); +//// +//// for (let i = 1; i < 4; i++) console.log(1); // 1,2,3 +//// for (let i = 1; i < 4; i++) +//// console.log(1); // 1,2,3 +//// +//// for (let i in [1, 2, 3]) console.log(1); +//// for (let i in [1, 2, 3]) +//// console.log(1); +//// +//// for (let i of [1, 2, 3]) console.log(1); +//// for (let i of [1, 2, 3]) +//// console.log(1); +//// +//// with ([1, 2, 3]) console.log(toString()); +//// with ([1, 2, 3]) +//// console.log(toString());/*2*/ +////} + +goTo.select("1", "2"); +edit.applyRefactor({ + refactorName: "Extract Symbol", + actionName: "function_scope_1", + actionDescription: "Extract to function in global scope", + newContent: +`function foo() { + /*RENAME*/newFunction(); +} + +function newFunction() { + if (true) console.log(1); + else console.log(1); + if (true) + console.log(1); + + else + console.log(1); + + do console.log(1); + while (false); + do + console.log(1); + while (false); + + while (true) console.log(1); + while (true) + console.log(1); + + for (let i = 1; i < 4; i++) console.log(1); // 1,2,3 + for (let i = 1; i < 4; i++) + console.log(1); // 1,2,3 + + for (let i in [1, 2, 3]) console.log(1); + for (let i in [1, 2, 3]) + console.log(1); + + for (let i of [1, 2, 3]) console.log(1); + for (let i of [1, 2, 3]) + console.log(1); + + with ([1, 2, 3]) console.log(toString()); + with ([1, 2, 3]) + console.log(toString()); +} +` +});