no-empty-static-block.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /**
  2. * @fileoverview Rule to disallow empty static blocks.
  3. * @author Sosuke Suzuki
  4. */
  5. "use strict";
  6. //------------------------------------------------------------------------------
  7. // Rule Definition
  8. //------------------------------------------------------------------------------
  9. /** @type {import('../types').Rule.RuleModule} */
  10. module.exports = {
  11. meta: {
  12. hasSuggestions: true,
  13. type: "suggestion",
  14. docs: {
  15. description: "Disallow empty static blocks",
  16. recommended: true,
  17. url: "https://eslint.org/docs/latest/rules/no-empty-static-block",
  18. },
  19. schema: [],
  20. messages: {
  21. unexpected: "Unexpected empty static block.",
  22. suggestComment: "Add comment inside empty static block.",
  23. },
  24. },
  25. create(context) {
  26. const sourceCode = context.sourceCode;
  27. return {
  28. StaticBlock(node) {
  29. if (node.body.length === 0) {
  30. const openingBrace = sourceCode.getFirstToken(node, {
  31. skip: 1,
  32. });
  33. const closingBrace = sourceCode.getLastToken(node);
  34. if (
  35. sourceCode.getCommentsBefore(closingBrace).length === 0
  36. ) {
  37. context.report({
  38. loc: {
  39. start: openingBrace.loc.start,
  40. end: closingBrace.loc.end,
  41. },
  42. messageId: "unexpected",
  43. suggest: [
  44. {
  45. messageId: "suggestComment",
  46. fix(fixer) {
  47. const range = [
  48. openingBrace.range[1],
  49. closingBrace.range[0],
  50. ];
  51. return fixer.replaceTextRange(
  52. range,
  53. " /* empty */ ",
  54. );
  55. },
  56. },
  57. ],
  58. });
  59. }
  60. }
  61. },
  62. };
  63. },
  64. };