Skip to content

Commit 3d22a4f

Browse files
authored
Preserve newlines between try/catch/finally, if/else, do/while (#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

+16-7
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

+1-2
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

+2-4
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

+2-4
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

+1-2
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

+1-2
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

+1-2
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

+1-2
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

+1-2
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

+1-2
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);

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_CatchFollowedByThenMatchingTypes02NoAnnotations.js

+1-2
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);

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_CatchFollowedByThenMatchingTypes02NoAnnotations.ts

+1-2
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);

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_CatchFollowedByThenMismatchTypes01.js

+1-2
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_CatchFollowedByThenMismatchTypes01.ts

+1-2
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_CatchFollowedByThenMismatchTypes02.ts

+1-2
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_CatchFollowedByThenMismatchTypes02NoAnnotations.js

+1-2
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_CatchFollowedByThenMismatchTypes02NoAnnotations.ts

+1-2
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_CatchFollowedByThenMismatchTypes03.js

+1-2
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_CatchFollowedByThenMismatchTypes03.ts

+1-2
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_CatchFollowedByThenMismatchTypes04.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ async function f(){
3939
try {
4040
const result_1 = await fetch("https://typescriptlang.org");
4141
result = await res(result_1);
42-
}
43-
catch (reject) {
42+
} catch (reject) {
4443
result = await rej(reject);
4544
}
4645
return res(result);

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_CatchNoBrackets.ts

+1-2
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
return console.log(result);
12-
}
13-
catch (err) {
12+
} catch (err) {
1413
return console.log(err);
1514
}
1615
}

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_CatchRef.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ async function f():Promise<void> {
1616
try {
1717
const result = await fetch('https://typescriptlang.org');
1818
return res(result);
19-
}
20-
catch (err) {
19+
} catch (err) {
2120
return catch_err(err);
2221
}
2322
}

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_InnerPromiseRet.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ async function innerPromise(): Promise<string> {
1616
try {
1717
const blob = await resp.blob();
1818
blob_1 = blob.byteOffset;
19-
}
20-
catch (err) {
19+
} catch (err) {
2120
blob_1 = 'Error';
2221
}
2322
return blob_1.toString();

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_InnerPromiseRetBinding1.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ async function innerPromise(): Promise<string> {
1616
try {
1717
const { blob } = await resp.blob();
1818
blob_1 = blob.byteOffset;
19-
}
20-
catch ({ message }) {
19+
} catch ({ message }) {
2120
blob_1 = 'Error ' + message;
2221
}
2322
return blob_1.toString();

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_InnerPromiseRetBinding2.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ async function innerPromise(): Promise<string> {
1616
try {
1717
const blob = await resp.blob();
1818
result = blob.byteOffset;
19-
}
20-
catch (err) {
19+
} catch (err) {
2120
result = 'Error';
2221
}
2322
const { x } = result;

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_InnerPromiseRetBinding3.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ async function innerPromise(): Promise<string> {
1616
try {
1717
const { blob } = await resp.blob();
1818
result = blob.byteOffset;
19-
}
20-
catch ({ message }) {
19+
} catch ({ message }) {
2120
result = 'Error ' + message;
2221
}
2322
const [x, y] = result;

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_InnerPromiseRetBinding4.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ async function innerPromise(): Promise<string> {
1616
try {
1717
const { blob } = await resp.blob();
1818
result = [0, blob.byteOffset];
19-
}
20-
catch ({ message }) {
19+
} catch ({ message }) {
2120
result = ['Error ', message];
2221
}
2322
const [x, y] = result;

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_LocalReturn.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ async function f() {
1212
let x = fetch("https://typescriptlang.org").then(res => console.log(res));
1313
try {
1414
return x;
15-
}
16-
catch (err) {
15+
} catch (err) {
1716
return console.log("Error!", err);
1817
}
1918
}

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_LocalReturn.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ async function f() {
1212
let x = fetch("https://typescriptlang.org").then(res => console.log(res));
1313
try {
1414
return x;
15-
}
16-
catch (err) {
15+
} catch (err) {
1716
return console.log("Error!", err);
1817
}
1918
}

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_MultipleCatches.ts

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

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_NoCatchHandler.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,5 @@ async function f() {
1010
try {
1111
const x = await fetch('https://typescriptlang.org');
1212
return x.statusText;
13-
}
14-
catch (e) { }
13+
} catch (e) { }
1514
}

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_NoCatchHandler.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,5 @@ async function f() {
1010
try {
1111
const x = await fetch('https://typescriptlang.org');
1212
return x.statusText;
13-
}
14-
catch (e) { }
13+
} catch (e) { }
1514
}

tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_NoRes.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ function /*[#|*/f/*|]*/():Promise<void | Response> {
99
async function f():Promise<void | Response> {
1010
try {
1111
await fetch('https://typescriptlang.org');
12-
}
13-
catch (rejection) {
12+
} catch (rejection) {
1413
return console.log("rejected:", rejection);
1514
}
1615
}

0 commit comments

Comments
 (0)