Fix for of/in comment on its own line around in/of (#901)

This is pretty edge case-y so i'm taking the easy way out.

Fixes #886
master
Christopher Chedeau 2017-03-09 11:10:55 -08:00 committed by GitHub
parent d034564481
commit 0aa3617689
3 changed files with 183 additions and 0 deletions

View File

@ -157,6 +157,7 @@ function attach(comments, ast, text, options) {
handleClassComments(enclosingNode, comment) ||
handleImportSpecifierComments(enclosingNode, comment) ||
handleObjectPropertyComments(enclosingNode, comment) ||
handleForComments(enclosingNode, precedingNode, comment) ||
handleUnionTypeComments(
precedingNode,
enclosingNode,
@ -634,6 +635,17 @@ function handleOnlyComments(enclosingNode, ast, comment, isLastComment) {
return false;
}
function handleForComments(enclosingNode, precedingNode, comment) {
if (enclosingNode && (
enclosingNode.type === "ForInStatement" ||
enclosingNode.type === "ForOfStatement")
) {
addLeadingComment(enclosingNode, comment);
return true;
}
return false;
}
function printComment(commentPath) {
const comment = commentPath.getValue();
comment.printed = true;

View File

@ -1,5 +1,139 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`comment.js 1`] = `
"for (x
/*a*/
in //b
y) //c
;
for (x in /*a*/ //b
y); //c
for (x /*a*/ in y); //b //c
for (x
//a
in y);
for(x in
//a
y);
for (x
/*a*/
of //b
y) //c
;
for (x of /*a*/ //b
y); //c
for (x /*a*/ of y); //b //c
for (x
//a
of y);
for(x of
//a
y);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/*a*/
for (x in y); //b //c
for (x /*a*/ in y); //b //c
for (x /*a*/ in y); //b //c
//a
for (x in y);
//a
for (x in y);
/*a*/
for (x of y); //b //c
for (x /*a*/ of y); //b //c
for (x /*a*/ of y); //b //c
//a
for (x of y);
//a
for (x of y);
"
`;
exports[`comment.js 2`] = `
"for (x
/*a*/
in //b
y) //c
;
for (x in /*a*/ //b
y); //c
for (x /*a*/ in y); //b //c
for (x
//a
in y);
for(x in
//a
y);
for (x
/*a*/
of //b
y) //c
;
for (x of /*a*/ //b
y); //c
for (x /*a*/ of y); //b //c
for (x
//a
of y);
for(x of
//a
y);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/*a*/
for (x in y); //b //c
for (x /*a*/ in y); //b //c
for (x /*a*/ in y); //b //c
//a
for (x in y);
//a
for (x in y);
/*a*/
for (x of y); //b //c
for (x /*a*/ of y); //b //c
for (x /*a*/ of y); //b //c
//a
for (x of y);
//a
for (x of y);
"
`;
exports[`for.js 1`] = `
"for (;;) {}
for (var i = 0; i < 10; ++i) {}

37
tests/for/comment.js Normal file
View File

@ -0,0 +1,37 @@
for (x
/*a*/
in //b
y) //c
;
for (x in /*a*/ //b
y); //c
for (x /*a*/ in y); //b //c
for (x
//a
in y);
for(x in
//a
y);
for (x
/*a*/
of //b
y) //c
;
for (x of /*a*/ //b
y); //c
for (x /*a*/ of y); //b //c
for (x
//a
of y);
for(x of
//a
y);