0a0d39b4d243975f1a757a00e27a88e1709a4557
[platform/framework/web/crosswalk-tizen.git] /
1 "use strict";
2
3 var _tk = require('rocambole-token');
4 var _ws = require('rocambole-whitespace');
5
6 var expressionParentheses = require('./expressionParentheses');
7
8
9 exports.format = function ReturnStatement(node) {
10   // need to make sure we only remove line breaks inside the node itself
11   // because of ASI (see #29)
12   var nonEmpty = _tk.findInBetween(node.startToken.next, node.endToken, _tk.isNotEmpty);
13   // XXX: we want to remove line breaks and white spaces inside the node, not
14   // using _br.limitAfter to avoid changing the program behavior (ASI)
15   if (nonEmpty) _tk.removeEmptyInBetween(node.startToken, nonEmpty);
16
17   _ws.limitAfter(node.startToken, 1);
18   if (_tk.isSemiColon(node.endToken)) {
19     // XXX: we want semicolon to be on same line and no whitespaces for now.
20     _tk.removeEmptyInBetween(_tk.findPrevNonEmpty(node.endToken), node.endToken);
21   }
22
23   if (node.argument) {
24     expressionParentheses.addSpaceInside(node.argument);
25   }
26 };
27
28
29 var _specialArguments = {
30   'BinaryExpression': true
31 };
32
33
34 exports.getIndentEdges = function(node, opts) {
35   // we bypass indentation if argument already adds indentation
36   if (!node.argument ||
37     (opts[node.argument.type] && !_specialArguments[node.argument.type])) {
38     return false;
39   }
40
41   var parentheses = expressionParentheses.getParentheses(node.argument);
42   return parentheses ?
43     {
44       startToken: parentheses.opening,
45       endToken: parentheses.closing
46     } :
47     {
48       startToken: node.startToken.next,
49       endToken: node.endToken
50     };
51 };