From ecc2bd21305b0d3e2bfe562742ff8a8c8b8d213d Mon Sep 17 00:00:00 2001 From: "amaresh.sm" Date: Mon, 4 Jul 2022 01:45:59 +0530 Subject: [PATCH 1/2] feat: suggest to add comments inside empty blocks --- docs/src/_data/rules.json | 2 +- docs/src/_data/rules_meta.json | 1 + lib/rules/no-empty.js | 38 +++++++++++++++++++++++++++++++--- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/docs/src/_data/rules.json b/docs/src/_data/rules.json index 81e0500a9ea..9ef92f691ed 100644 --- a/docs/src/_data/rules.json +++ b/docs/src/_data/rules.json @@ -724,7 +724,7 @@ "description": "Disallow empty block statements", "recommended": true, "fixable": false, - "hasSuggestions": false + "hasSuggestions": true }, { "name": "no-empty-function", diff --git a/docs/src/_data/rules_meta.json b/docs/src/_data/rules_meta.json index 56a986260b3..04a97727d1a 100644 --- a/docs/src/_data/rules_meta.json +++ b/docs/src/_data/rules_meta.json @@ -927,6 +927,7 @@ "fixable": "code" }, "no-empty": { + "hasSuggestions": true, "type": "suggestion", "docs": { "description": "Disallow empty block statements", diff --git a/lib/rules/no-empty.js b/lib/rules/no-empty.js index 459140a2e70..2a5625a3fbf 100644 --- a/lib/rules/no-empty.js +++ b/lib/rules/no-empty.js @@ -17,6 +17,7 @@ const astUtils = require("./utils/ast-utils"); /** @type {import('../shared/types').Rule} */ module.exports = { meta: { + hasSuggestions: true, type: "suggestion", docs: { @@ -39,7 +40,8 @@ module.exports = { ], messages: { - unexpected: "Empty {{type}} statement." + unexpected: "Empty {{type}} statement.", + suggestComment: "Add comment inside empty {{type}} statement." } }, @@ -52,6 +54,8 @@ module.exports = { return { BlockStatement(node) { + const range = [node.range[0] + 1, node.range[1] - 1]; + // if the body is not empty, we can just return immediately if (node.body.length !== 0) { return; @@ -71,13 +75,41 @@ module.exports = { return; } - context.report({ node, messageId: "unexpected", data: { type: "block" } }); + context.report({ + node, + messageId: "unexpected", + data: { type: "block" }, + suggest: [ + { + messageId: "suggestComment", + data: { type: "block" }, + fix(fixer) { + return fixer.replaceTextRange(range, " /* empty */ "); + } + } + ] + }); }, SwitchStatement(node) { + const range = [node.range[0] + 1, node.range[1] - 1]; + if (typeof node.cases === "undefined" || node.cases.length === 0) { - context.report({ node, messageId: "unexpected", data: { type: "switch" } }); + context.report({ + node, + messageId: "unexpected", + data: { type: "switch" }, + suggest: [ + { + messageId: "suggestComment", + data: { type: "block" }, + fix(fixer) { + return fixer.replaceTextRange(range, " /* empty */ "); + } + } + ] + }); } } }; From f0638f4d978f8d08df3b3dd36d5ae4849dc0f588 Mon Sep 17 00:00:00 2001 From: "amaresh.sm" Date: Sat, 13 Aug 2022 03:49:47 +0530 Subject: [PATCH 2/2] feat: fix switch range issue --- lib/rules/no-empty.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/rules/no-empty.js b/lib/rules/no-empty.js index 2a5625a3fbf..c7342635df7 100644 --- a/lib/rules/no-empty.js +++ b/lib/rules/no-empty.js @@ -53,7 +53,6 @@ module.exports = { return { BlockStatement(node) { - const range = [node.range[0] + 1, node.range[1] - 1]; // if the body is not empty, we can just return immediately @@ -92,8 +91,9 @@ module.exports = { }, SwitchStatement(node) { - - const range = [node.range[0] + 1, node.range[1] - 1]; + const closingCurly = sourceCode.getLastToken(node); + const openingCurly = sourceCode.getTokenBefore(node.cases.length ? node.cases[0] : closingCurly); + const range = [openingCurly.range[0] + 1, closingCurly.range[1] - 1]; if (typeof node.cases === "undefined" || node.cases.length === 0) { context.report({ @@ -103,7 +103,7 @@ module.exports = { suggest: [ { messageId: "suggestComment", - data: { type: "block" }, + data: { type: "switch" }, fix(fixer) { return fixer.replaceTextRange(range, " /* empty */ "); }