prefer-es6-class.js 1.3 KB

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