no-is-mounted.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /**
  2. * @fileoverview Prevent usage of isMounted
  3. * @author Joe Lencioni
  4. */
  5. 'use strict';
  6. const docsUrl = require('../util/docsUrl');
  7. const getAncestors = require('../util/eslint').getAncestors;
  8. const report = require('../util/report');
  9. // ------------------------------------------------------------------------------
  10. // Rule Definition
  11. // ------------------------------------------------------------------------------
  12. const messages = {
  13. noIsMounted: 'Do not use isMounted',
  14. };
  15. /** @type {import('eslint').Rule.RuleModule} */
  16. module.exports = {
  17. meta: {
  18. docs: {
  19. description: 'Disallow usage of isMounted',
  20. category: 'Best Practices',
  21. recommended: true,
  22. url: docsUrl('no-is-mounted'),
  23. },
  24. messages,
  25. schema: [],
  26. },
  27. create(context) {
  28. return {
  29. CallExpression(node) {
  30. const callee = node.callee;
  31. if (callee.type !== 'MemberExpression') {
  32. return;
  33. }
  34. if (
  35. callee.object.type !== 'ThisExpression'
  36. || !('name' in callee.property)
  37. || callee.property.name !== 'isMounted'
  38. ) {
  39. return;
  40. }
  41. const ancestors = getAncestors(context, node);
  42. for (let i = 0, j = ancestors.length; i < j; i++) {
  43. if (ancestors[i].type === 'Property' || ancestors[i].type === 'MethodDefinition') {
  44. report(context, messages.noIsMounted, 'noIsMounted', {
  45. node: callee,
  46. });
  47. break;
  48. }
  49. }
  50. },
  51. };
  52. },
  53. };