diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 5370e7c4f027d..d626b20e3eadf 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -12227,6 +12227,11 @@ namespace ts { checkExpression(node.expression); checkSourceElement(node.thenStatement); + + if (node.thenStatement.kind === SyntaxKind.EmptyStatement) { + error(node.thenStatement, Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement); + } + checkSourceElement(node.elseStatement); } diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index da83628c706ea..4b4b3ab204d25 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -799,7 +799,11 @@ "'=' can only be used in an object literal property inside a destructuring assignment.": { "category": "Error", "code": 1312 - }, + }, + "The body of an 'if' statement cannot be the empty statement.": { + "category": "Error", + "code": 1313 + }, "Duplicate identifier '{0}'.": { "category": "Error", "code": 2300 diff --git a/tests/baselines/reference/emptyThenWarning.errors.txt b/tests/baselines/reference/emptyThenWarning.errors.txt new file mode 100644 index 0000000000000..a4f9126186577 --- /dev/null +++ b/tests/baselines/reference/emptyThenWarning.errors.txt @@ -0,0 +1,15 @@ +tests/cases/compiler/emptyThenWarning.ts(1,6): error TS1313: The body of an 'if' statement cannot be the empty statement. +tests/cases/compiler/emptyThenWarning.ts(4,19): error TS1313: The body of an 'if' statement cannot be the empty statement. + + +==== tests/cases/compiler/emptyThenWarning.ts (2 errors) ==== + if(1); + ~ +!!! error TS1313: The body of an 'if' statement cannot be the empty statement. + + let x = 0; + if (true === true); { + ~ +!!! error TS1313: The body of an 'if' statement cannot be the empty statement. + x = 1; + } \ No newline at end of file diff --git a/tests/baselines/reference/emptyThenWarning.js b/tests/baselines/reference/emptyThenWarning.js new file mode 100644 index 0000000000000..c7959d03d57db --- /dev/null +++ b/tests/baselines/reference/emptyThenWarning.js @@ -0,0 +1,17 @@ +//// [emptyThenWarning.ts] +if(1); + +let x = 0; +if (true === true); { + x = 1; +} + +//// [emptyThenWarning.js] +if (1) + ; +var x = 0; +if (true === true) + ; +{ + x = 1; +} diff --git a/tests/baselines/reference/emptyThenWithoutWarning.js b/tests/baselines/reference/emptyThenWithoutWarning.js new file mode 100644 index 0000000000000..107531fe1e38b --- /dev/null +++ b/tests/baselines/reference/emptyThenWithoutWarning.js @@ -0,0 +1,16 @@ +//// [emptyThenWithoutWarning.ts] +let a = 4; + +if(a === 1 || a === 2 || a === 3) { +} +else { + let message = "Ooops"; +} + +//// [emptyThenWithoutWarning.js] +var a = 4; +if (a === 1 || a === 2 || a === 3) { +} +else { + var message = "Ooops"; +} diff --git a/tests/baselines/reference/emptyThenWithoutWarning.symbols b/tests/baselines/reference/emptyThenWithoutWarning.symbols new file mode 100644 index 0000000000000..d707e7bc89cb8 --- /dev/null +++ b/tests/baselines/reference/emptyThenWithoutWarning.symbols @@ -0,0 +1,13 @@ +=== tests/cases/compiler/emptyThenWithoutWarning.ts === +let a = 4; +>a : Symbol(a, Decl(emptyThenWithoutWarning.ts, 0, 3)) + +if(a === 1 || a === 2 || a === 3) { +>a : Symbol(a, Decl(emptyThenWithoutWarning.ts, 0, 3)) +>a : Symbol(a, Decl(emptyThenWithoutWarning.ts, 0, 3)) +>a : Symbol(a, Decl(emptyThenWithoutWarning.ts, 0, 3)) +} +else { + let message = "Ooops"; +>message : Symbol(message, Decl(emptyThenWithoutWarning.ts, 5, 7)) +} diff --git a/tests/baselines/reference/emptyThenWithoutWarning.types b/tests/baselines/reference/emptyThenWithoutWarning.types new file mode 100644 index 0000000000000..2dca405966931 --- /dev/null +++ b/tests/baselines/reference/emptyThenWithoutWarning.types @@ -0,0 +1,23 @@ +=== tests/cases/compiler/emptyThenWithoutWarning.ts === +let a = 4; +>a : number +>4 : number + +if(a === 1 || a === 2 || a === 3) { +>a === 1 || a === 2 || a === 3 : boolean +>a === 1 || a === 2 : boolean +>a === 1 : boolean +>a : number +>1 : number +>a === 2 : boolean +>a : number +>2 : number +>a === 3 : boolean +>a : number +>3 : number +} +else { + let message = "Ooops"; +>message : string +>"Ooops" : string +} diff --git a/tests/cases/compiler/emptyThenWarning.ts b/tests/cases/compiler/emptyThenWarning.ts new file mode 100644 index 0000000000000..4811c0b440071 --- /dev/null +++ b/tests/cases/compiler/emptyThenWarning.ts @@ -0,0 +1,6 @@ +if(1); + +let x = 0; +if (true === true); { + x = 1; +} \ No newline at end of file diff --git a/tests/cases/compiler/emptyThenWithoutWarning.ts b/tests/cases/compiler/emptyThenWithoutWarning.ts new file mode 100644 index 0000000000000..c35b9b3181d56 --- /dev/null +++ b/tests/cases/compiler/emptyThenWithoutWarning.ts @@ -0,0 +1,7 @@ +let a = 4; + +if(a === 1 || a === 2 || a === 3) { +} +else { + let message = "Ooops"; +} \ No newline at end of file