UNPKG

2.4 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _utilities = require('../utilities');
8
9exports.default = function (context) {
10 var sourceCode = context.getSourceCode();
11
12 var always = (context.options[0] || 'always') === 'always';
13
14 var getTokenAfterParens = function getTokenAfterParens(node) {
15 var sep = void 0;
16
17 sep = sourceCode.getTokenAfter(node);
18
19 while (sep.type === 'Punctuator' && sep.value === ')') {
20 sep = sourceCode.getTokenAfter(sep);
21 }
22
23 return sep;
24 };
25
26 var check = function check(node) {
27 node.types.forEach(function (type, index) {
28 if (index + 1 === node.types.length) {
29 return;
30 }
31
32 var separator = getTokenAfterParens(type);
33 var endOfType = sourceCode.getTokenBefore(separator);
34 var nextType = sourceCode.getTokenAfter(separator);
35
36 var spaceBefore = separator.start - endOfType.end;
37 var spaceAfter = nextType.start - separator.end;
38
39 var data = { type: node.type === 'UnionTypeAnnotation' ? 'union' : 'intersection' };
40
41 if (always) {
42 if (!spaceBefore) {
43 context.report({
44 data: data,
45 fix: _utilities.spacingFixers.addSpaceAfter(endOfType),
46 message: 'There must be a space before {{type}} type annotation separator',
47 node: node
48 });
49 }
50
51 if (!spaceAfter) {
52 context.report({
53 data: data,
54 fix: _utilities.spacingFixers.addSpaceAfter(separator),
55 message: 'There must be a space after {{type}} type annotation separator',
56 node: node
57 });
58 }
59 } else {
60 if (spaceBefore) {
61 context.report({
62 data: data,
63 fix: _utilities.spacingFixers.stripSpacesAfter(endOfType, spaceBefore),
64 message: 'There must be no space before {{type}} type annotation separator',
65 node: node
66 });
67 }
68
69 if (spaceAfter) {
70 context.report({
71 data: data,
72 fix: _utilities.spacingFixers.stripSpacesAfter(separator, spaceAfter),
73 message: 'There must be no space after {{type}} type annotation separator',
74 node: node
75 });
76 }
77 }
78 });
79 };
80
81 return {
82 IntersectionTypeAnnotation: check,
83 UnionTypeAnnotation: check
84 };
85};
86
87module.exports = exports['default'];
\No newline at end of file