Skip to content

Commit

Permalink
Add special path to VariableDeclarator leadingComments. #10
Browse files Browse the repository at this point in the history
  • Loading branch information
Constellation committed May 20, 2012
1 parent 4230d22 commit be532f1
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 21 deletions.
55 changes: 34 additions & 21 deletions escodegen.js
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -636,7 +636,7 @@
} }


function generateStatement(stmt) { function generateStatement(stmt) {
var i, len, result, previousBase, comment, save, ret; var i, len, result, previousBase, comment, save, ret, node;


switch (stmt.type) { switch (stmt.type) {
case Syntax.BlockStatement: case Syntax.BlockStatement:
Expand Down Expand Up @@ -708,20 +708,33 @@
break; break;


case Syntax.VariableDeclaration: case Syntax.VariableDeclaration:
result = stmt.kind + ' '; result = stmt.kind;
// special path for // special path for
// var x = function () { // var x = function () {
// }; // };
if (stmt.declarations.length === 1 && stmt.declarations[0].init && if (stmt.declarations.length === 1 && stmt.declarations[0].init &&
stmt.declarations[0].init.type === Syntax.FunctionExpression) { stmt.declarations[0].init.type === Syntax.FunctionExpression) {
result += generateStatement(stmt.declarations[0]); result += ' ' + generateStatement(stmt.declarations[0]);
} else { } else {
// VariableDeclarator is typed as Statement,
// but joined with comma (not LineTerminator).
// So if comment is attached to target node, we should specialize.
previousBase = base; previousBase = base;
base += indent; base += indent;
for (i = 0, len = stmt.declarations.length; i < len; i += 1) {
result += generateStatement(stmt.declarations[i]); node = stmt.declarations[0];
if ((i + 1) < len) { if (node.leadingComments) {
result += ', '; result += '\n' + addIndent(generateStatement(node));
} else {
result += ' ' + generateStatement(node);
}

for (i = 1, len = stmt.declarations.length; i < len; i += 1) {
node = stmt.declarations[i];
if (node.leadingComments) {
result += ',\n' + addIndent(generateStatement(node));
} else {
result += ', ' + generateStatement(node);
} }
} }
base = previousBase; base = previousBase;
Expand Down Expand Up @@ -912,22 +925,22 @@


if (stmt.leadingComments) { if (stmt.leadingComments) {
save = result; save = result;
result = '';
if (stmt.leadingComments.length) { comment = stmt.leadingComments[0];
comment = stmt.leadingComments[0]; result = generateComment(comment);
result = generateComment(comment); if (!endsWithLineTerminator(result)) {
if (!endsWithLineTerminator(result)) { result += '\n';
result += '\n'; }
}
for (i = 1, len = stmt.leadingComments.length; i < len; i += 1) { for (i = 1, len = stmt.leadingComments.length; i < len; i += 1) {
comment = stmt.leadingComments[i]; comment = stmt.leadingComments[i];
ret = generateComment(comment); ret = generateComment(comment);
if (!endsWithLineTerminator(ret)) { if (!endsWithLineTerminator(ret)) {
ret += '\n'; ret += '\n';
}
result += addIndent(ret);
} }
result += addIndent(ret);
} }

result += addIndent(save); result += addIndent(save);
} }


Expand Down
9 changes: 9 additions & 0 deletions test/comment/variable-declarator-line-comment.expected.js
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,9 @@
function test() {
var
// Leading to VariableDeclarator
// Leading to VariableDeclarator
i = 20,
// Leading to VariableDeclarator
// Leading to VariableDeclarator
j = 20;
}
9 changes: 9 additions & 0 deletions test/comment/variable-declarator-line-comment.js
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,9 @@
function test() {
var
// Leading to VariableDeclarator
// Leading to VariableDeclarator
i = 20,
// Leading to VariableDeclarator
// Leading to VariableDeclarator
j = 20;
}
13 changes: 13 additions & 0 deletions test/comment/variable-declarator-multi-comment.expected.js
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,13 @@
function test() {
var
/*
* Leading to VariableDeclarator
* Leading to VariableDeclarator
*/
i = 20,
/*
* Leading to VariableDeclarator
* Leading to VariableDeclarator
*/
j = 20;
}
13 changes: 13 additions & 0 deletions test/comment/variable-declarator-multi-comment.js
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,13 @@
function test() {
var
/*
* Leading to VariableDeclarator
* Leading to VariableDeclarator
*/
i = 20,
/*
* Leading to VariableDeclarator
* Leading to VariableDeclarator
*/
j = 20;
}

0 comments on commit be532f1

Please sign in to comment.