3 var _br = require('rocambole-linebreak');
4 var _tk = require('rocambole-token');
5 var _ws = require('rocambole-whitespace');
8 exports.format = function VariableDeclaration(node) {
9 var insideFor = node.parent.type === 'ForStatement';
11 node.declarations.forEach(function(declarator, i) {
12 var idStartToken = declarator.id.startToken;
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);
21 _ws.limit(prevNonEmpty, 0);
22 _tk.remove(prevNonEmpty);
23 _tk.after(beforeComma, prevNonEmpty);
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');
34 _ws.limitBefore(idStartToken, 'VariableName');
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');
47 // always add a space after the "var" keyword
48 _ws.limitAfter(node.startToken, 1);
52 exports.getIndentEdges = function(node, opts) {
55 if (opts.MultipleVariableDeclaration && node.declarations.length > 1) {
59 node.declarations.forEach(function(declaration) {
60 var init = declaration.init;
61 if (init && opts['VariableDeclaration.' + init.type]) {
63 startToken: init.startToken,
64 endToken: init.endToken.next || node.endToken