fixUnreachableCode: Don't delete whole block when non-first line is unreachable (#25625)

This commit is contained in:
Andy 2018-07-13 09:57:04 -07:00 committed by GitHub
parent 88c6ced3c6
commit 27da9eab8d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 52 additions and 25 deletions

View file

@ -18,31 +18,33 @@ namespace ts.codefix {
Debug.assert(statement.getStart(sourceFile) === token.getStart(sourceFile));
const container = (isBlock(statement.parent) ? statement.parent : statement).parent;
switch (container.kind) {
case SyntaxKind.IfStatement:
if ((container as IfStatement).elseStatement) {
if (isBlock(statement.parent)) {
changes.deleteNodeRange(sourceFile, first(statement.parent.statements), last(statement.parent.statements));
if (!isBlock(statement.parent) || statement === first(statement.parent.statements)) {
switch (container.kind) {
case SyntaxKind.IfStatement:
if ((container as IfStatement).elseStatement) {
if (isBlock(statement.parent)) {
break;
}
else {
changes.replaceNode(sourceFile, statement, createBlock(emptyArray));
}
return;
}
else {
changes.replaceNode(sourceFile, statement, createBlock(emptyArray));
}
break;
}
// falls through
case SyntaxKind.WhileStatement:
case SyntaxKind.ForStatement:
changes.delete(sourceFile, container);
break;
default:
if (isBlock(statement.parent)) {
const end = start + length;
const lastStatement = Debug.assertDefined(lastWhere(sliceAfter(statement.parent.statements, statement), s => s.pos < end));
changes.deleteNodeRange(sourceFile, statement, lastStatement);
}
else {
changes.delete(sourceFile, statement);
}
// falls through
case SyntaxKind.WhileStatement:
case SyntaxKind.ForStatement:
changes.delete(sourceFile, container);
return;
}
}
if (isBlock(statement.parent)) {
const end = start + length;
const lastStatement = Debug.assertDefined(lastWhere(sliceAfter(statement.parent.statements, statement), s => s.pos < end));
changes.deleteNodeRange(sourceFile, statement, lastStatement);
}
else {
changes.delete(sourceFile, statement);
}
}

View file

@ -22,6 +22,20 @@
////for (let x = 0; false; ++x) {
//// a;
////}
////
////while (true) {
//// 1;
//// break;
//// 2;
////}
////
////function f() {
//// if (true) {
//// 1;
//// return;
//// 2;
//// }
////}
verify.codeFixAll({
fixId: "fixUnreachableCode",
@ -36,5 +50,16 @@ if (false) {
}
`,
while (true) {
1;
break;
}
function f() {
if (true) {
1;
return;
}
}`,
});