From f3626611a38cf16705406b88aecdb8d69e7fef93 Mon Sep 17 00:00:00 2001 From: Lucas Duailibe Date: Sat, 7 Apr 2018 13:38:37 -0300 Subject: [PATCH] Handle ContinueStatement and BreakStatement comments (#4279) --- src/language-js/comments.js | 16 ++++++++++- .../comments/__snapshots__/jsfmt.spec.js.snap | 27 +++++++++++++++++++ tests/comments/break-continue-statements.js | 11 ++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 tests/comments/break-continue-statements.js diff --git a/src/language-js/comments.js b/src/language-js/comments.js index 04380db5..e41c0435 100644 --- a/src/language-js/comments.js +++ b/src/language-js/comments.js @@ -135,7 +135,8 @@ function handleRemainingComment(comment, text, options, ast, isLastComment) { precedingNode, comment, options - ) + ) || + handleBreakAndContinueStatementComments(enclosingNode, comment) ) { return true; } @@ -553,6 +554,19 @@ function handleLabeledStatementComments(enclosingNode, comment) { return false; } +function handleBreakAndContinueStatementComments(enclosingNode, comment) { + if ( + enclosingNode && + (enclosingNode.type === "ContinueStatement" || + enclosingNode.type === "BreakStatement") && + !enclosingNode.label + ) { + addTrailingComment(enclosingNode, comment); + return true; + } + return false; +} + function handleCallExpressionComments(precedingNode, enclosingNode, comment) { if ( enclosingNode && diff --git a/tests/comments/__snapshots__/jsfmt.spec.js.snap b/tests/comments/__snapshots__/jsfmt.spec.js.snap index cb62c7ca..ec012d56 100644 --- a/tests/comments/__snapshots__/jsfmt.spec.js.snap +++ b/tests/comments/__snapshots__/jsfmt.spec.js.snap @@ -82,6 +82,33 @@ exports[`blank.js 1`] = ` `; +exports[`break-continue-statements.js 1`] = ` +for (;;) { + break /* comment */; + continue /* comment */; +} + +loop: for (;;) { + break /* comment */ loop; + break loop /* comment */; + continue /* comment */ loop; + continue loop /* comment */; +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +for (;;) { + break; /* comment */ + continue; /* comment */ +} + +loop: for (;;) { + break /* comment */ loop; + break loop /* comment */; + continue /* comment */ loop; + continue loop /* comment */; +} + +`; + exports[`call_comment.js 1`] = ` render( // Warm any cache , diff --git a/tests/comments/break-continue-statements.js b/tests/comments/break-continue-statements.js new file mode 100644 index 00000000..ce8f6617 --- /dev/null +++ b/tests/comments/break-continue-statements.js @@ -0,0 +1,11 @@ +for (;;) { + break /* comment */; + continue /* comment */; +} + +loop: for (;;) { + break /* comment */ loop; + break loop /* comment */; + continue /* comment */ loop; + continue loop /* comment */; +}