5c5b2b3a3f8d55b80f18ad84a90197413f5ee8d3
[platform/framework/web/crosswalk-tizen.git] /
1 "use strict";
2
3 var _tk = require('rocambole-token');
4 var _limit = require('../limit');
5
6
7 exports.format = function ArrayExpression(node) {
8   if (node.elements.length) {
9     _limit.around(node.startToken, 'ArrayExpressionOpening');
10     _limit.around(node.endToken, 'ArrayExpressionClosing');
11
12     node.elements.forEach(function(el) {
13       // sparse arrays have `null` elements
14       if (!el) return;
15
16       var prev = _tk.findPrevNonEmpty(el.startToken);
17       if (prev.value === ',') {
18         _limit.around(prev, 'ArrayExpressionComma');
19       }
20     });
21   } else {
22     // empty array should be single line
23     _limit.after(node.startToken, 0);
24   }
25 };
26
27
28 exports.getIndentEdges = function(node) {
29   var start;
30   var prev = node.startToken;
31
32   // this will grab the start of first element that is on a new line
33   node.elements.some(function(el, i, els) {
34     // sparse arrays have `null` elements! which is very weird
35     if (i) {
36       var prevEl = els[i - 1];
37       prev = prevEl ? prevEl.endToken : _tk.findNextNonEmpty(prev);
38     }
39     var next = el ? el.startToken : _tk.findNextNonEmpty(prev);
40
41     if (_tk.findInBetween(prev, next, _tk.isBr)) {
42       start = prev;
43       return true;
44     }
45   });
46
47   var end = node.endToken.prev;
48
49   // if it ends on same line as previous non-empty we need to change the indent
50   // rule to make sure {}, [] and () are aligned
51   var sibling = _tk.findPrevNonEmpty(node.endToken);
52   if (!_tk.findInBetween(sibling, node.endToken, _tk.isBr)) {
53     end = node.endToken;
54   }
55
56   return start ? {
57     startToken: start,
58     endToken: end
59   } : false;
60 };
61