prefer-es6-class.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. module.exports = {
  17. meta: {
  18. docs: {
  19. description: 'Enforce ES5 or ES6 class for React Components',
  20. category: 'Stylistic Issues',
  21. recommended: false,
  22. url: docsUrl('prefer-es6-class'),
  23. },
  24. messages,
  25. schema: [{
  26. enum: ['always', 'never'],
  27. }],
  28. },
  29. create(context) {
  30. const configuration = context.options[0] || 'always';
  31. return {
  32. ObjectExpression(node) {
  33. if (componentUtil.isES5Component(node, context) && configuration === 'always') {
  34. report(context, messages.shouldUseES6Class, 'shouldUseES6Class', {
  35. node,
  36. });
  37. }
  38. },
  39. ClassDeclaration(node) {
  40. if (componentUtil.isES6Component(node, context) && configuration === 'never') {
  41. report(context, messages.shouldUseCreateClass, 'shouldUseCreateClass', {
  42. node,
  43. });
  44. }
  45. },
  46. };
  47. },
  48. };