diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index d15e4de4be6e0..d16680f7e1d24 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4866,7 +4866,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 0000000000000..f3d456176e272 --- /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()); +} +` +});