index.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports["default"] = void 0;
  6. var _isSimpleType = _interopRequireDefault(require("./isSimpleType"));
  7. var _needWrap = _interopRequireDefault(require("./needWrap"));
  8. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
  9. var schema = [{
  10. "enum": ['verbose', 'shorthand'],
  11. type: 'string'
  12. }];
  13. var inlineType = function inlineType(type) {
  14. var inlined = type.replace(/[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+/g, ' ');
  15. if (inlined.length <= 50) {
  16. return inlined;
  17. }
  18. return 'Type';
  19. };
  20. var _default = function _default(defaultConfig, simpleType) {
  21. var create = function create(context) {
  22. var verbose = (context.options[0] || defaultConfig) === 'verbose';
  23. return {
  24. // shorthand
  25. ArrayTypeAnnotation: function ArrayTypeAnnotation(node) {
  26. var rawElementType = context.getSourceCode().getText(node.elementType);
  27. var inlinedType = inlineType(rawElementType);
  28. var wrappedInlinedType = (0, _needWrap["default"])(node.elementType) ? "(".concat(inlinedType, ")") : inlinedType;
  29. if ((0, _isSimpleType["default"])(node.elementType) === simpleType && verbose) {
  30. context.report({
  31. data: {
  32. type: inlinedType,
  33. wrappedType: wrappedInlinedType
  34. },
  35. fix: function fix(fixer) {
  36. return fixer.replaceText(node, "Array<".concat(rawElementType, ">"));
  37. },
  38. message: 'Use "Array<{{ type }}>", not "{{ wrappedType }}[]"',
  39. node: node
  40. });
  41. }
  42. },
  43. // verbose
  44. GenericTypeAnnotation: function GenericTypeAnnotation(node) {
  45. // Don't report on un-parameterized Array annotations. There are valid cases for this,
  46. // but regardless, we must NOT crash when encountering them.
  47. if (node.id.name === 'Array' && node.typeParameters && node.typeParameters.params.length === 1) {
  48. var elementTypeNode = node.typeParameters.params[0];
  49. var rawElementType = context.getSourceCode().getText(elementTypeNode);
  50. var inlinedType = inlineType(rawElementType);
  51. var wrappedInlinedType = (0, _needWrap["default"])(elementTypeNode) ? "(".concat(inlinedType, ")") : inlinedType;
  52. if ((0, _isSimpleType["default"])(elementTypeNode) === simpleType && !verbose) {
  53. context.report({
  54. data: {
  55. type: inlinedType,
  56. wrappedType: wrappedInlinedType
  57. },
  58. fix: function fix(fixer) {
  59. if ((0, _needWrap["default"])(elementTypeNode)) {
  60. return fixer.replaceText(node, "(".concat(rawElementType, ")[]"));
  61. }
  62. return fixer.replaceText(node, "".concat(rawElementType, "[]"));
  63. },
  64. message: 'Use "{{ wrappedType }}[]", not "Array<{{ type }}>"',
  65. node: node
  66. });
  67. }
  68. }
  69. }
  70. };
  71. };
  72. return {
  73. create: create,
  74. meta: {
  75. fixable: 'code'
  76. },
  77. schema: schema
  78. };
  79. };
  80. exports["default"] = _default;
  81. module.exports = exports.default;