Skip to content

Commit 3d22a4f

Browse files
authored
Preserve newlines between try/catch/finally, if/else, do/while (microsoft#39280)
* Preserve newlines between try/catch, if/else, do/while * Update baselines
1 parent 4601a78 commit 3d22a4f

File tree

50 files changed

+124
-109
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+124
-109
lines changed

src/compiler/emitter.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2667,7 +2667,7 @@ namespace ts {
26672667
emitTokenWithComment(SyntaxKind.CloseParenToken, node.expression.end, writePunctuation, node);
26682668
emitEmbeddedStatement(node, node.thenStatement);
26692669
if (node.elseStatement) {
2670-
writeLineOrSpace(node);
2670+
writeLineOrSpace(node, node.thenStatement, node.elseStatement);
26712671
emitTokenWithComment(SyntaxKind.ElseKeyword, node.thenStatement.end, writeKeyword, node);
26722672
if (node.elseStatement.kind === SyntaxKind.IfStatement) {
26732673
writeSpace();
@@ -2690,11 +2690,11 @@ namespace ts {
26902690
function emitDoStatement(node: DoStatement) {
26912691
emitTokenWithComment(SyntaxKind.DoKeyword, node.pos, writeKeyword, node);
26922692
emitEmbeddedStatement(node, node.statement);
2693-
if (isBlock(node.statement)) {
2693+
if (isBlock(node.statement) && !preserveSourceNewlines) {
26942694
writeSpace();
26952695
}
26962696
else {
2697-
writeLineOrSpace(node);
2697+
writeLineOrSpace(node, node.statement, node.expression);
26982698
}
26992699

27002700
emitWhileClause(node, node.statement.end);
@@ -2836,11 +2836,11 @@ namespace ts {
28362836
writeSpace();
28372837
emit(node.tryBlock);
28382838
if (node.catchClause) {
2839-
writeLineOrSpace(node);
2839+
writeLineOrSpace(node, node.tryBlock, node.catchClause);
28402840
emit(node.catchClause);
28412841
}
28422842
if (node.finallyBlock) {
2843-
writeLineOrSpace(node);
2843+
writeLineOrSpace(node, node.catchClause || node.tryBlock, node.finallyBlock);
28442844
emitTokenWithComment(SyntaxKind.FinallyKeyword, (node.catchClause || node.tryBlock).end, writeKeyword, node);
28452845
writeSpace();
28462846
emit(node.finallyBlock);
@@ -4249,10 +4249,19 @@ namespace ts {
42494249
return pos! < 0 ? pos! : pos! + tokenString.length;
42504250
}
42514251

4252-
function writeLineOrSpace(node: Node) {
4253-
if (getEmitFlags(node) & EmitFlags.SingleLine) {
4252+
function writeLineOrSpace(parentNode: Node, prevChildNode: Node, nextChildNode: Node) {
4253+
if (getEmitFlags(parentNode) & EmitFlags.SingleLine) {
42544254
writeSpace();
42554255
}
4256+
else if (preserveSourceNewlines) {
4257+
const lines = getLinesBetweenNodes(parentNode, prevChildNode, nextChildNode);
4258+
if (lines) {
4259+
writeLine(lines);
4260+
}
4261+
else {
4262+
writeSpace();
4263+
}
4264+
}
42564265
else {
42574266
writeLine();
42584267
}

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_Catch.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ async function f():Promise<void> {
99
try {
1010
const result = await fetch('https://typescriptlang.org');
1111
console.log(result);
12-
}
13-
catch (err) {
12+
} catch (err) {
1413
console.log(err);
1514
}
1615
}

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_CatchAndRej.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,10 @@ async function f():Promise<void> {
1010
try {
1111
const result = await fetch('https://typescriptlang.org');
1212
console.log(result);
13-
}
14-
catch (rejection) {
13+
} catch (rejection) {
1514
console.log("rejected:", rejection);
1615
}
17-
}
18-
catch (err) {
16+
} catch (err) {
1917
console.log(err);
2018
}
2119
}

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_CatchAndRejRef.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,10 @@ async function f():Promise<void> {
1919
try {
2020
const result = await fetch('https://typescriptlang.org');
2121
return res(result);
22-
}
23-
catch (rejection) {
22+
} catch (rejection) {
2423
return rej(rejection);
2524
}
26-
}
27-
catch (err) {
25+
} catch (err) {
2826
return catch_err(err);
2927
}
3028
}

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_CatchFollowedByThen.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ async function f(){
1919
try {
2020
const result_1 = await fetch("https://typescriptlang.org");
2121
result = await res(result_1);
22-
}
23-
catch (reject) {
22+
} catch (reject) {
2423
result = await rej(reject);
2524
}
2625
return res(result);

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_CatchFollowedByThen.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ async function f(){
1919
try {
2020
const result_1 = await fetch("https://typescriptlang.org");
2121
result = await res(result_1);
22-
}
23-
catch (reject) {
22+
} catch (reject) {
2423
result = await rej(reject);
2524
}
2625
return res(result);

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_CatchFollowedByThenMatchingTypes01.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ async function f(){
1919
try {
2020
const result_1 = await fetch("https://typescriptlang.org");
2121
result = await res(result_1);
22-
}
23-
catch (reject) {
22+
} catch (reject) {
2423
result = await rej(reject);
2524
}
2625
return res(result);

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_CatchFollowedByThenMatchingTypes01NoAnnotations.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ async function f(){
1919
try {
2020
const result_1 = await fetch("https://typescriptlang.org");
2121
result = await res(result_1);
22-
}
23-
catch (reject) {
22+
} catch (reject) {
2423
result = await rej(reject);
2524
}
2625
return res(result);

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_CatchFollowedByThenMatchingTypes01NoAnnotations.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ async function f(){
1919
try {
2020
const result_1 = await fetch("https://typescriptlang.org");
2121
result = await res(result_1);
22-
}
23-
catch (reject) {
22+
} catch (reject) {
2423
result = await rej(reject);
2524
}
2625
return res(result);

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_CatchFollowedByThenMatchingTypes02.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ async function f(){
1515
try {
1616
const res = await fetch("https://typescriptlang.org");
1717
result = 0;
18-
}
19-
catch (rej) {
18+
} catch (rej) {
2019
result = 1;
2120
}
2221
return res(result);

0 commit comments

Comments
 (0)