From 6ad7e864303e56a39c89569d50c6caf80752ee21 Mon Sep 17 00:00:00 2001 From: Milos Djermanovic Date: Sun, 29 Sep 2019 06:07:27 +0200 Subject: [PATCH] Fix: no-extra-label autofix removes comments (#12298) --- lib/rules/no-extra-label.js | 10 +++++++- tests/lib/rules/no-extra-label.js | 42 +++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/lib/rules/no-extra-label.js b/lib/rules/no-extra-label.js index a4a98af5853..48add937e6e 100644 --- a/lib/rules/no-extra-label.js +++ b/lib/rules/no-extra-label.js @@ -116,7 +116,15 @@ module.exports = { node: labelNode, messageId: "unexpected", data: labelNode, - fix: fixer => fixer.removeRange([sourceCode.getFirstToken(node).range[1], labelNode.range[1]]) + fix(fixer) { + const breakOrContinueToken = sourceCode.getFirstToken(node); + + if (sourceCode.commentsExistBetween(breakOrContinueToken, labelNode)) { + return null; + } + + return fixer.removeRange([breakOrContinueToken.range[1], labelNode.range[1]]); + } }); } return; diff --git a/tests/lib/rules/no-extra-label.js b/tests/lib/rules/no-extra-label.js index 8a3affa0b89..e810ef4e320 100644 --- a/tests/lib/rules/no-extra-label.js +++ b/tests/lib/rules/no-extra-label.js @@ -106,6 +106,48 @@ ruleTester.run("no-extra-label", rule, { } `, errors: [{ messageId: "unexpected", data: { name: "A" }, type: "Identifier", line: 2 }] + }, + + // Should not autofix if it would remove comments + { + code: "A: while(true) { /*comment*/break A; }", + output: "A: while(true) { /*comment*/break; }", + errors: [{ messageId: "unexpected", data: { name: "A" } }] + }, + { + code: "A: while(true) { break/**/ A; }", + output: null, + errors: [{ messageId: "unexpected", data: { name: "A" } }] + }, + { + code: "A: while(true) { continue /**/ A; }", + output: null, + errors: [{ messageId: "unexpected", data: { name: "A" } }] + }, + { + code: "A: while(true) { break /**/A; }", + output: null, + errors: [{ messageId: "unexpected", data: { name: "A" } }] + }, + { + code: "A: while(true) { continue/**/A; }", + output: null, + errors: [{ messageId: "unexpected", data: { name: "A" } }] + }, + { + code: "A: while(true) { continue A/*comment*/; }", + output: "A: while(true) { continue/*comment*/; }", + errors: [{ messageId: "unexpected", data: { name: "A" } }] + }, + { + code: "A: while(true) { break A//comment\n }", + output: "A: while(true) { break//comment\n }", + errors: [{ messageId: "unexpected", data: { name: "A" } }] + }, + { + code: "A: while(true) { break A/*comment*/\nfoo() }", + output: "A: while(true) { break/*comment*/\nfoo() }", + errors: [{ messageId: "unexpected", data: { name: "A" } }] } ] });