prefer-es6-class.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /**
  2. * @fileoverview Enforce ES5 or ES6 class for React Components
  3. * @author Dan Hamilton
  4. */
  5. 'use strict';
  6. const componentUtil = require('../util/componentUtil');
  7. const docsUrl = require('../util/docsUrl');
  8. const report = require('../util/report');
  9. // ------------------------------------------------------------------------------
  10. // Rule Definition
  11. // ------------------------------------------------------------------------------
  12. const messages = {
  13. shouldUseES6Class: 'Component should use es6 class instead of createClass',
  14. shouldUseCreateClass: 'Component should use createClass instead of es6 class',
  15. };
  16. /** @type {import('eslint').Rule.RuleModule} */
  17. module.exports = {
  18. meta: {
  19. docs: {
  20. description: 'Enforce ES5 or ES6 class for React Components',
  21. category: 'Stylistic Issues',
  22. recommended: false,
  23. url: docsUrl('prefer-es6-class'),
  24. },
  25. messages,
  26. schema: [{
  27. enum: ['always', 'never'],
  28. }],
  29. },
  30. create(context) {
  31. const configuration = context.options[0] || 'always';
  32. return {
  33. ObjectExpression(node) {
  34. if (componentUtil.isES5Component(node, context) && configuration === 'always') {
  35. report(context, messages.shouldUseES6Class, 'shouldUseES6Class', {
  36. node,
  37. });
  38. }
  39. },
  40. ClassDeclaration(node) {
  41. if (componentUtil.isES6Component(node, context) && configuration === 'never') {
  42. report(context, messages.shouldUseCreateClass, 'shouldUseCreateClass', {
  43. node,
  44. });
  45. }
  46. },
  47. };
  48. },
  49. };