| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | /** * @fileoverview require default case in switch statements * @author Aliaksei Shytkin */"use strict";const DEFAULT_COMMENT_PATTERN = /^no default$/iu;//------------------------------------------------------------------------------// Rule Definition//------------------------------------------------------------------------------/** @type {import('../shared/types').Rule} */module.exports = {    meta: {        type: "suggestion",        docs: {            description: "Require `default` cases in `switch` statements",            recommended: false,            url: "https://eslint.org/docs/rules/default-case"        },        schema: [{            type: "object",            properties: {                commentPattern: {                    type: "string"                }            },            additionalProperties: false        }],        messages: {            missingDefaultCase: "Expected a default case."        }    },    create(context) {        const options = context.options[0] || {};        const commentPattern = options.commentPattern            ? new RegExp(options.commentPattern, "u")            : DEFAULT_COMMENT_PATTERN;        const sourceCode = context.getSourceCode();        //--------------------------------------------------------------------------        // Helpers        //--------------------------------------------------------------------------        /**         * Shortcut to get last element of array         * @param {*[]} collection Array         * @returns {any} Last element         */        function last(collection) {            return collection[collection.length - 1];        }        //--------------------------------------------------------------------------        // Public        //--------------------------------------------------------------------------        return {            SwitchStatement(node) {                if (!node.cases.length) {                    /*                     * skip check of empty switch because there is no easy way                     * to extract comments inside it now                     */                    return;                }                const hasDefault = node.cases.some(v => v.test === null);                if (!hasDefault) {                    let comment;                    const lastCase = last(node.cases);                    const comments = sourceCode.getCommentsAfter(lastCase);                    if (comments.length) {                        comment = last(comments);                    }                    if (!comment || !commentPattern.test(comment.value.trim())) {                        context.report({ node, messageId: "missingDefaultCase" });                    }                }            }        };    }};
 |