Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 14 additions & 6 deletions src/compiler/emitter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -862,6 +862,7 @@ export function emitFiles(resolver: EmitResolver, host: EmitHost, targetSourceFi
inlineSources: compilerOptions.inlineSources,
extendedDiagnostics: compilerOptions.extendedDiagnostics,
writeBundleFileInfo: !!bundleBuildInfo,
preserveSourceNewlines: true,
Comment thread
iinicole marked this conversation as resolved.
Outdated
relativeToBuildInfo
};

Expand Down Expand Up @@ -4866,20 +4867,27 @@ export function createPrinter(printerOptions: PrinterOptions = {}, handlers: Pri
}

function emitEmbeddedStatement(parent: Node, node: Statement) {
if (isBlock(node) || getEmitFlags(parent) & EmitFlags.SingleLine) {
const lines = getLeadingLineTerminatorCount(parent, node, ListFormat.None);
Comment thread
iinicole marked this conversation as resolved.
Outdated
if (isBlock(node) || getEmitFlags(parent) & EmitFlags.SingleLine || !lines) {
writeSpace();
emit(node);
}
else {
writeLine();
increaseIndent();
if (isEmptyStatement(node)) {
pipelineEmit(EmitHint.EmbeddedStatement, node);
if (lines) {
writeLine(lines);
increaseIndent();
if (isEmptyStatement(node)) {
pipelineEmit(EmitHint.EmbeddedStatement, node);
}
else {
emit(node);
}
decreaseIndent();
}
else {
writeSpace();
emit(node);
Comment thread
iinicole marked this conversation as resolved.
Outdated
}
decreaseIndent();
}
}

Expand Down
47 changes: 47 additions & 0 deletions tests/baselines/reference/preserveSpace.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
//// [preserveSpace.ts]
function f() {
return [].filter(x => {
if (!x) return false; // testing comments
if (x)
return true; // testing comments
if (x) {
return false; // testing comments
} else {
console.log("here"); // testing comments
}
let i: number = 0;
while (i > 0) i = i - 1;
do console.log("here");
while (false);

try {
return true;
} catch (e) {
return false;
}
});
}

//// [preserveSpace.js]
function f() {
return [].filter(function (x) {
if (!x) return false; // testing comments
if (x)
return true; // testing comments
if (x) {
return false; // testing comments
} else {
console.log("here"); // testing comments
}
var i = 0;
while (i > 0) i = i - 1;
do console.log("here");
while (false);

try {
return true;
} catch (e) {
return false;
}
});
}
50 changes: 50 additions & 0 deletions tests/baselines/reference/preserveSpace.symbols
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
=== tests/cases/conformance/preserveSpace.ts ===
function f() {
>f : Symbol(f, Decl(preserveSpace.ts, 0, 0))

return [].filter(x => {
>[].filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
>x : Symbol(x, Decl(preserveSpace.ts, 1, 19))

if (!x) return false; // testing comments
>x : Symbol(x, Decl(preserveSpace.ts, 1, 19))

if (x)
>x : Symbol(x, Decl(preserveSpace.ts, 1, 19))

return true; // testing comments
if (x) {
>x : Symbol(x, Decl(preserveSpace.ts, 1, 19))

return false; // testing comments
} else {
console.log("here"); // testing comments
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
}
let i: number = 0;
>i : Symbol(i, Decl(preserveSpace.ts, 10, 11))

while (i > 0) i = i - 1;
>i : Symbol(i, Decl(preserveSpace.ts, 10, 11))
>i : Symbol(i, Decl(preserveSpace.ts, 10, 11))
>i : Symbol(i, Decl(preserveSpace.ts, 10, 11))

do console.log("here");
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))

while (false);

try {
return true;
} catch (e) {
>e : Symbol(e, Decl(preserveSpace.ts, 17, 17))

return false;
}
});
}
73 changes: 73 additions & 0 deletions tests/baselines/reference/preserveSpace.types
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
=== tests/cases/conformance/preserveSpace.ts ===
function f() {
>f : () => any[]

return [].filter(x => {
>[].filter(x => { if (!x) return false; // testing comments if (x) return true; // testing comments if (x) { return false; // testing comments } else { console.log("here"); // testing comments } let i: number = 0; while (i > 0) i = i - 1; do console.log("here"); while (false); try { return true; } catch (e) { return false; } }) : any[]
>[].filter : { <S extends any>(predicate: (value: any, index: number, array: any[]) => value is S, thisArg?: any): S[]; (predicate: (value: any, index: number, array: any[]) => unknown, thisArg?: any): any[]; }
>[] : undefined[]
>filter : { <S extends any>(predicate: (value: any, index: number, array: any[]) => value is S, thisArg?: any): S[]; (predicate: (value: any, index: number, array: any[]) => unknown, thisArg?: any): any[]; }
>x => { if (!x) return false; // testing comments if (x) return true; // testing comments if (x) { return false; // testing comments } else { console.log("here"); // testing comments } let i: number = 0; while (i > 0) i = i - 1; do console.log("here"); while (false); try { return true; } catch (e) { return false; } } : (x: any) => boolean
>x : any

if (!x) return false; // testing comments
>!x : boolean
>x : any
>false : false

if (x)
>x : any

return true; // testing comments
>true : true

if (x) {
>x : any

return false; // testing comments
>false : false

} else {
console.log("here"); // testing comments
>console.log("here") : void
>console.log : (...data: any[]) => void
>console : Console
>log : (...data: any[]) => void
>"here" : "here"
}
let i: number = 0;
>i : number
>0 : 0

while (i > 0) i = i - 1;
>i > 0 : boolean
>i : number
>0 : 0
>i = i - 1 : number
>i : number
>i - 1 : number
>i : number
>1 : 1

do console.log("here");
>console.log("here") : void
>console.log : (...data: any[]) => void
>console : Console
>log : (...data: any[]) => void
>"here" : "here"

while (false);
>false : false

try {
return true;
>true : true

} catch (e) {
>e : any

return false;
>false : false
}
});
}
22 changes: 22 additions & 0 deletions tests/cases/conformance/preserveSpace.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
function f() {
return [].filter(x => {
if (!x) return false; // testing comments
if (x)
return true; // testing comments
if (x) {
return false; // testing comments
} else {
console.log("here"); // testing comments
}
let i: number = 0;
while (i > 0) i = i - 1;
do console.log("here");
while (false);

try {
return true;
} catch (e) {
return false;
}
});
}