3 var _tk = require('rocambole-token');
4 var _limit = require('../limit');
5 var _parens = require('./expressionParentheses');
8 exports.format = function CallExpression(node) {
9 var openingParentheses = _tk.findNext(node.callee.endToken, '(');
10 var closingParentheses = node.endToken;
12 _limit.around(openingParentheses, 'CallExpressionOpeningParentheses');
13 _limit.around(closingParentheses, 'CallExpressionClosingParentheses');
15 var args = node['arguments'];
18 _limit.before(_tk.findNextNonEmpty(openingParentheses), 'ArgumentList');
20 args.forEach(function(arg) {
21 var next = _tk.findInBetween(arg.endToken, closingParentheses, ',');
22 if (next && next.value === ',') {
23 _limit.around(next, 'ArgumentComma');
27 _limit.after(_tk.findPrevNonEmpty(closingParentheses), 'ArgumentList');
30 _limit.after(openingParentheses, 0);
31 _limit.before(closingParentheses, 0);
35 if (node.callee.type !== 'FunctionExpression') {
39 var parens = _parens.getParentheses({
41 startToken: node.startToken,
42 endToken: node.endToken
46 _limit.after(parens.opening, 'IIFEOpeningParentheses');
47 _limit.before(parens.closing, 'IIFEClosingParentheses');
52 exports.getIndentEdges = function(node, opts) {
54 var openingParentheses = _tk.findNext(node.callee.endToken, '(');
56 if (!node.arguments.length) {
57 // it might contain comments inside even tho there are no args
59 startToken: openingParentheses,
60 endToken: _tk.findNext(openingParentheses, ')')
66 function hasBr(start, end) {
67 return _tk.findInBetween(start, end, _tk.isBr);
70 node.arguments.some(function(arg, i, args) {
71 var prev = i ? args[i - 1].endToken.next : openingParentheses;
72 if (hasBr(prev, arg.startToken)) {
79 // we handle BinaryExpressions here because multiple operations are grouped
80 // inside the same root node, and we need to indent if it breaks lines
81 node.arguments.some(function(arg) {
82 if (opts['CallExpression.' + arg.type] &&
83 hasBr(arg.startToken, arg.endToken)) {
84 start = arg.startToken.next;
92 endToken: node.endToken