| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | /** * @fileoverview Rule to flag use of an empty block statement * @author Nicholas C. Zakas */"use strict";//------------------------------------------------------------------------------// Requirements//------------------------------------------------------------------------------const astUtils = require("./utils/ast-utils");//------------------------------------------------------------------------------// Rule Definition//------------------------------------------------------------------------------/** @type {import('../shared/types').Rule} */module.exports = {    meta: {        hasSuggestions: true,        type: "suggestion",        docs: {            description: "Disallow empty block statements",            recommended: true,            url: "https://eslint.org/docs/rules/no-empty"        },        schema: [            {                type: "object",                properties: {                    allowEmptyCatch: {                        type: "boolean",                        default: false                    }                },                additionalProperties: false            }        ],        messages: {            unexpected: "Empty {{type}} statement.",            suggestComment: "Add comment inside empty {{type}} statement."        }    },    create(context) {        const options = context.options[0] || {},            allowEmptyCatch = options.allowEmptyCatch || false;        const sourceCode = context.getSourceCode();        return {            BlockStatement(node) {                // if the body is not empty, we can just return immediately                if (node.body.length !== 0) {                    return;                }                // a function is generally allowed to be empty                if (astUtils.isFunction(node.parent)) {                    return;                }                if (allowEmptyCatch && node.parent.type === "CatchClause") {                    return;                }                // any other block is only allowed to be empty, if it contains a comment                if (sourceCode.getCommentsInside(node).length > 0) {                    return;                }                context.report({                    node,                    messageId: "unexpected",                    data: { type: "block" },                    suggest: [                        {                            messageId: "suggestComment",                            data: { type: "block" },                            fix(fixer) {                                const range = [node.range[0] + 1, node.range[1] - 1];                                return fixer.replaceTextRange(range, " /* empty */ ");                            }                        }                    ]                });            },            SwitchStatement(node) {                if (typeof node.cases === "undefined" || node.cases.length === 0) {                    context.report({ node, messageId: "unexpected", data: { type: "switch" } });                }            }        };    }};
 |