jsx-uses-react.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /**
  2. * @fileoverview Prevent React to be marked as unused
  3. * @author Glen Mailer
  4. */
  5. 'use strict';
  6. const pragmaUtil = require('../util/pragma');
  7. const docsUrl = require('../util/docsUrl');
  8. const markVariableAsUsed = require('../util/eslint').markVariableAsUsed;
  9. // ------------------------------------------------------------------------------
  10. // Rule Definition
  11. // ------------------------------------------------------------------------------
  12. /** @type {import('eslint').Rule.RuleModule} */
  13. module.exports = {
  14. // eslint-disable-next-line eslint-plugin/prefer-message-ids -- https://github.com/not-an-aardvark/eslint-plugin-eslint-plugin/issues/292
  15. meta: {
  16. docs: {
  17. description: 'Disallow React to be incorrectly marked as unused',
  18. category: 'Best Practices',
  19. recommended: true,
  20. url: docsUrl('jsx-uses-react'),
  21. },
  22. schema: [],
  23. },
  24. create(context) {
  25. const pragma = pragmaUtil.getFromContext(context);
  26. const fragment = pragmaUtil.getFragmentFromContext(context);
  27. /**
  28. * @param {ASTNode} node
  29. * @returns {void}
  30. */
  31. function handleOpeningElement(node) {
  32. markVariableAsUsed(pragma, node, context);
  33. }
  34. // --------------------------------------------------------------------------
  35. // Public
  36. // --------------------------------------------------------------------------
  37. return {
  38. JSXOpeningElement: handleOpeningElement,
  39. JSXOpeningFragment: handleOpeningElement,
  40. JSXFragment(node) {
  41. markVariableAsUsed(fragment, node, context);
  42. },
  43. };
  44. },
  45. };