default-case-last.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /**
  2. * @fileoverview Rule to enforce `default` clauses in `switch` statements to be last
  3. * @author Milos Djermanovic
  4. */
  5. "use strict";
  6. //------------------------------------------------------------------------------
  7. // Rule Definition
  8. //------------------------------------------------------------------------------
  9. /** @type {import('../types').Rule.RuleModule} */
  10. module.exports = {
  11. meta: {
  12. type: "suggestion",
  13. docs: {
  14. description:
  15. "Enforce `default` clauses in `switch` statements to be last",
  16. recommended: false,
  17. url: "https://eslint.org/docs/latest/rules/default-case-last",
  18. },
  19. schema: [],
  20. messages: {
  21. notLast: "Default clause should be the last clause.",
  22. },
  23. },
  24. create(context) {
  25. return {
  26. SwitchStatement(node) {
  27. const cases = node.cases,
  28. indexOfDefault = cases.findIndex(c => c.test === null);
  29. if (
  30. indexOfDefault !== -1 &&
  31. indexOfDefault !== cases.length - 1
  32. ) {
  33. const defaultClause = cases[indexOfDefault];
  34. context.report({
  35. node: defaultClause,
  36. messageId: "notLast",
  37. });
  38. }
  39. },
  40. };
  41. },
  42. };