1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
|
8 |
|
9 | var _lodash = require('lodash');
|
10 |
|
11 | var _lodash2 = _interopRequireDefault(_lodash);
|
12 |
|
13 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
14 |
|
15 | exports.default = function (context) {
|
16 | var option = context.options[0] || 'never';
|
17 | var sourceCode = context.getSourceCode();
|
18 |
|
19 | var reporter = function reporter(node, message, fix) {
|
20 | return function () {
|
21 | context.report({
|
22 | fix: fix,
|
23 | message: message,
|
24 | node: node
|
25 | });
|
26 | };
|
27 | };
|
28 |
|
29 | var makeReporters = function makeReporters(node, tokenToFix) {
|
30 | return {
|
31 | dangle: reporter(node, 'Unexpected trailing delimiter', function (fixer) {
|
32 | return fixer.replaceText(tokenToFix, '');
|
33 | }),
|
34 | noDangle: reporter(node, 'Missing trailing delimiter', function (fixer) {
|
35 | return fixer.insertTextAfter(tokenToFix, ',');
|
36 | })
|
37 | };
|
38 | };
|
39 |
|
40 | var evaluate = function evaluate(node, lastChildNode) {
|
41 | if (!lastChildNode) {
|
42 | return;
|
43 | }
|
44 |
|
45 | var _sourceCode$getLastTo = sourceCode.getLastTokens(node, 2);
|
46 |
|
47 | var _sourceCode$getLastTo2 = _slicedToArray(_sourceCode$getLastTo, 2);
|
48 |
|
49 | var penultimateToken = _sourceCode$getLastTo2[0];
|
50 | var lastToken = _sourceCode$getLastTo2[1];
|
51 |
|
52 |
|
53 | var isDangling = [';', ','].indexOf(penultimateToken.value) > -1;
|
54 | var isMultiLine = penultimateToken.loc.start.line !== lastToken.loc.start.line;
|
55 |
|
56 | var report = makeReporters(lastChildNode, penultimateToken);
|
57 |
|
58 | if (option === 'always' && !isDangling) {
|
59 | report.noDangle();
|
60 |
|
61 | return;
|
62 | }
|
63 |
|
64 | if (option === 'never' && isDangling) {
|
65 | report.dangle();
|
66 |
|
67 | return;
|
68 | }
|
69 |
|
70 | if (option === 'always-multiline' && !isDangling && isMultiLine) {
|
71 | report.noDangle();
|
72 |
|
73 | return;
|
74 | }
|
75 |
|
76 | if (option === 'always-multiline' && isDangling && !isMultiLine) {
|
77 | report.dangle();
|
78 |
|
79 | return;
|
80 | }
|
81 |
|
82 | if (option === 'only-multiline' && isDangling && !isMultiLine) {
|
83 | report.dangle();
|
84 |
|
85 | return;
|
86 | }
|
87 | };
|
88 |
|
89 |
|
90 | var getLast = function getLast(property, indexer) {
|
91 | if (!property) {
|
92 | return indexer;
|
93 | }
|
94 |
|
95 | if (!indexer) {
|
96 | return property;
|
97 | }
|
98 |
|
99 | if (property.loc.end.line > indexer.loc.end.line) {
|
100 | return property;
|
101 | }
|
102 |
|
103 | if (indexer.loc.end.line > property.loc.end.line) {
|
104 | return indexer;
|
105 | }
|
106 |
|
107 | if (property.loc.end.column > indexer.loc.end.column) {
|
108 | return property;
|
109 | }
|
110 |
|
111 | return indexer;
|
112 | };
|
113 |
|
114 | return {
|
115 | ObjectTypeAnnotation: function ObjectTypeAnnotation(node) {
|
116 | evaluate(node, getLast(_lodash2.default.last(node.properties), _lodash2.default.last(node.indexers)));
|
117 | },
|
118 | TupleTypeAnnotation: function TupleTypeAnnotation(node) {
|
119 | evaluate(node, _lodash2.default.last(node.types));
|
120 | }
|
121 | };
|
122 | };
|
123 |
|
124 | module.exports = exports['default']; |
\ | No newline at end of file |