2 * @fileoverview require default case in switch statements
3 * @author Aliaksei Shytkin
7 const DEFAULT_COMMENT_PATTERN = /^no default$/iu;
9 //------------------------------------------------------------------------------
11 //------------------------------------------------------------------------------
18 description: "require `default` cases in `switch` statements",
19 category: "Best Practices",
21 url: "https://eslint.org/docs/rules/default-case"
31 additionalProperties: false
35 missingDefaultCase: "Expected a default case."
40 const options = context.options[0] || {};
41 const commentPattern = options.commentPattern
42 ? new RegExp(options.commentPattern, "u")
43 : DEFAULT_COMMENT_PATTERN;
45 const sourceCode = context.getSourceCode();
47 //--------------------------------------------------------------------------
49 //--------------------------------------------------------------------------
52 * Shortcut to get last element of array
53 * @param {*[]} collection Array
54 * @returns {*} Last element
56 function last(collection) {
57 return collection[collection.length - 1];
60 //--------------------------------------------------------------------------
62 //--------------------------------------------------------------------------
66 SwitchStatement(node) {
68 if (!node.cases.length) {
71 * skip check of empty switch because there is no easy way
72 * to extract comments inside it now
77 const hasDefault = node.cases.some(v => v.test === null);
83 const lastCase = last(node.cases);
84 const comments = sourceCode.getCommentsAfter(lastCase);
86 if (comments.length) {
87 comment = last(comments);
90 if (!comment || !commentPattern.test(comment.value.trim())) {
91 context.report({ node, messageId: "missingDefaultCase" });