no-class-assign.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /**
  2. * @fileoverview A rule to disallow modifying variables of class declarations
  3. * @author Toru Nagashima
  4. */
  5. "use strict";
  6. const astUtils = require("../ast-utils");
  7. //------------------------------------------------------------------------------
  8. // Rule Definition
  9. //------------------------------------------------------------------------------
  10. module.exports = {
  11. meta: {
  12. docs: {
  13. description: "disallow reassigning class members",
  14. category: "ECMAScript 6",
  15. recommended: true,
  16. url: "https://eslint.org/docs/rules/no-class-assign"
  17. },
  18. schema: [],
  19. messages: {
  20. class: "'{{name}}' is a class."
  21. }
  22. },
  23. create(context) {
  24. /**
  25. * Finds and reports references that are non initializer and writable.
  26. * @param {Variable} variable - A variable to check.
  27. * @returns {void}
  28. */
  29. function checkVariable(variable) {
  30. astUtils.getModifyingReferences(variable.references).forEach(reference => {
  31. context.report({ node: reference.identifier, messageId: "class", data: { name: reference.identifier.name } });
  32. });
  33. }
  34. /**
  35. * Finds and reports references that are non initializer and writable.
  36. * @param {ASTNode} node - A ClassDeclaration/ClassExpression node to check.
  37. * @returns {void}
  38. */
  39. function checkForClass(node) {
  40. context.getDeclaredVariables(node).forEach(checkVariable);
  41. }
  42. return {
  43. ClassDeclaration: checkForClass,
  44. ClassExpression: checkForClass
  45. };
  46. }
  47. };