6cf51d5440dd58a902a176ac1a81f6e41baa8aae
[platform/framework/web/crosswalk-tizen.git] /
1 "use strict";
2
3 var _br = require('rocambole-linebreak');
4 var _tk = require('rocambole-token');
5 var _ws = require('rocambole-whitespace');
6
7
8 exports.format = function VariableDeclaration(node) {
9   var insideFor = node.parent.type === 'ForStatement';
10
11   node.declarations.forEach(function(declarator, i) {
12     var idStartToken = declarator.id.startToken;
13
14     // need to swap comma-first line break
15     var prevNonEmpty = _tk.findPrevNonEmpty(idStartToken);
16     if (i && prevNonEmpty.value === ',') {
17       if (_tk.isBr(prevNonEmpty.prev) || _tk.isBr(prevNonEmpty.prev.prev)) {
18         var beforeComma = _tk.findPrev(prevNonEmpty, function(t) {
19           return !_tk.isEmpty(t) && !_tk.isComment(t);
20         });
21         _ws.limit(prevNonEmpty, 0);
22         _tk.remove(prevNonEmpty);
23         _tk.after(beforeComma, prevNonEmpty);
24       }
25     }
26
27     if (!i && !_tk.isComment(_tk.findPrevNonEmpty(idStartToken))) {
28       // XXX: we don't allow line breaks or multiple spaces after "var"
29       // keyword for now (might change in the future)
30       _tk.removeEmptyAdjacentBefore(idStartToken);
31     } else if (!insideFor && declarator.init) {
32       _br.limit(idStartToken, 'VariableName');
33     }
34     _ws.limitBefore(idStartToken, 'VariableName');
35
36     if (declarator.init) {
37       _ws.limitAfter(declarator.id.endToken, 'VariableName');
38       var equalSign = _tk.findNext(declarator.id.endToken, '=');
39       var valueStart = _tk.findNextNonEmpty(equalSign);
40       _br.limitBefore(valueStart, 'VariableValue');
41       _ws.limitBefore(valueStart, 'VariableValue');
42       _br.limitAfter(declarator.endToken, 'VariableValue');
43       _ws.limitAfter(declarator.endToken, 'VariableValue');
44     }
45   });
46
47   // always add a space after the "var" keyword
48   _ws.limitAfter(node.startToken, 1);
49 };
50
51
52 exports.getIndentEdges = function(node, opts) {
53   var edges = [];
54
55   if (opts.MultipleVariableDeclaration && node.declarations.length > 1) {
56     edges.push(node);
57   }
58
59   node.declarations.forEach(function(declaration) {
60     var init = declaration.init;
61     if (init && opts['VariableDeclaration.' + init.type]) {
62       edges.push({
63         startToken: init.startToken,
64         endToken: init.endToken.next || node.endToken
65       });
66     }
67   });
68
69   return edges;
70 };