symbol-description.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /**
  2. * @fileoverview Rule to enforce description with the `Symbol` object
  3. * @author Jarek Rencz
  4. */
  5. "use strict";
  6. //------------------------------------------------------------------------------
  7. // Requirements
  8. //------------------------------------------------------------------------------
  9. const astUtils = require("../util/ast-utils");
  10. //------------------------------------------------------------------------------
  11. // Rule Definition
  12. //------------------------------------------------------------------------------
  13. module.exports = {
  14. meta: {
  15. type: "suggestion",
  16. docs: {
  17. description: "require symbol descriptions",
  18. category: "ECMAScript 6",
  19. recommended: false,
  20. url: "https://eslint.org/docs/rules/symbol-description"
  21. },
  22. fixable: null,
  23. schema: [],
  24. messages: {
  25. expected: "Expected Symbol to have a description."
  26. }
  27. },
  28. create(context) {
  29. /**
  30. * Reports if node does not conform the rule in case rule is set to
  31. * report missing description
  32. *
  33. * @param {ASTNode} node - A CallExpression node to check.
  34. * @returns {void}
  35. */
  36. function checkArgument(node) {
  37. if (node.arguments.length === 0) {
  38. context.report({
  39. node,
  40. messageId: "expected"
  41. });
  42. }
  43. }
  44. return {
  45. "Program:exit"() {
  46. const scope = context.getScope();
  47. const variable = astUtils.getVariableByName(scope, "Symbol");
  48. if (variable && variable.defs.length === 0) {
  49. variable.references.forEach(reference => {
  50. const node = reference.identifier;
  51. if (astUtils.isCallee(node)) {
  52. checkArgument(node.parent);
  53. }
  54. });
  55. }
  56. }
  57. };
  58. }
  59. };