Handle dangling comments in SwitchStatement (#19581)

This commit is contained in:
fisker Cheung authored and GitHub committed 2026-07-09 11:28:31 +08:00
1 parent 943a475c35
commit 908503e9ee
9 files changed
+338 -1

No files matched your search

+21
View File
@@ -0,0 +1,21 @@
#### Handle dangling comments in `SwitchStatement` (#19581 by @fisker)
<!-- prettier-ignore -->
```jsx
// Input
switch (foo) {
// comment
}
// Prettier stable
switch (
foo
// comment
) {
}
// Prettier main
switch (foo) {
// comment
}
```
@@ -0,0 +1,41 @@
import { addDanglingComment } from "../../../main/comments/utilities.js";
import getNextNonSpaceNonCommentCharacter from "../../../utilities/get-next-non-space-non-comment-character.js";
import { locEnd } from "../../location/index.js";
/**
@import {CommentContext} from "../handle-comments.js"
*/
/**
@param {CommentContext} param0
*/
function handleSwitchStatementComments({
comment,
precedingNode,
enclosingNode,
followingNode,
text,
}) {
if (!(
enclosingNode?.type === "SwitchStatement" &&
enclosingNode.cases.length === 0 &&
!followingNode &&
precedingNode === enclosingNode.discriminant
)) {
return false;
}
const nextCharacter = getNextNonSpaceNonCommentCharacter(
text,
locEnd(comment),
);
if (nextCharacter === "}") {
addDanglingComment(enclosingNode, comment);
return true;
}
return false;
}
export { handleSwitchStatementComments };
@@ -32,6 +32,7 @@ import {
import { stripComments } from "../utilities/strip-comments.js"; import { stripComments } from "../utilities/strip-comments.js";
import { handleForXStatementComments } from "./attach/handle-for-x-statement-comments.js"; import { handleForXStatementComments } from "./attach/handle-for-x-statement-comments.js";
import { handleIfStatementComments } from "./attach/handle-if-statement-comments.js"; import { handleIfStatementComments } from "./attach/handle-if-statement-comments.js";
import { handleSwitchStatementComments } from "./attach/handle-switch-statement-comments.js";
import { handleWhileLikeComments } from "./attach/handle-while-like-comments.js"; import { handleWhileLikeComments } from "./attach/handle-while-like-comments.js";
import { import {
addLeadingCommentToPossibleUnionType, addLeadingCommentToPossibleUnionType,
@@ -74,6 +75,7 @@ function handleOwnLineComment(context) {
handleMemberExpressionComments, handleMemberExpressionComments,
handleIfStatementComments, handleIfStatementComments,
handleWhileLikeComments, handleWhileLikeComments,
handleSwitchStatementComments,
handleTryStatementComments, handleTryStatementComments,
handleClassComments, handleClassComments,
handleForXStatementComments, handleForXStatementComments,
@@ -105,6 +107,7 @@ function handleEndOfLineComment(context) {
handleModuleSpecifiersComments, handleModuleSpecifiersComments,
handleIfStatementComments, handleIfStatementComments,
handleWhileLikeComments, handleWhileLikeComments,
handleSwitchStatementComments,
handleTryStatementComments, handleTryStatementComments,
handleClassComments, handleClassComments,
handleForXStatementComments, handleForXStatementComments,
@@ -134,6 +137,7 @@ function handleRemainingComment(context) {
handleIgnoreComments, handleIgnoreComments,
handleIfStatementComments, handleIfStatementComments,
handleWhileLikeComments, handleWhileLikeComments,
handleSwitchStatementComments,
handleForXStatementComments, handleForXStatementComments,
handleMethodNameComments, handleMethodNameComments,
handleOnlyComments, handleOnlyComments,
+1 -1
View File
@@ -33,7 +33,7 @@ function printSwitchStatement(path, options, print) {
), ),
), ),
]) ])
: "", : printDanglingComments(path, options, { indent: true }),
hardline, hardline,
"}", "}",
]; ];
@@ -13,6 +13,10 @@ if(
if(true)// 2 if(true)// 2
{} {}
if(true)
// 22
{}
if(true){}// 3 if(true){}// 3
if(true)/*4*/{} if(true)/*4*/{}
@@ -29,6 +33,17 @@ if(true) /* 7 */ ++x;
if(1) // 8 if(1) // 8
foo(); foo();
if (0) {// comment
}
if (0) {
// comment
}
if (0) {/* comment */}
if ((0, 0/* comment */)) {}
=====================================output===================================== =====================================output=====================================
if ( if (
true true
@@ -40,6 +55,11 @@ if (true) // 2
{ {
} }
if (true)
// 22
{
}
if (true) { if (true) {
} // 3 } // 3
@@ -61,6 +81,111 @@ if (1)
// 8 // 8
foo(); foo();
if (0) {
// comment
}
if (0) {
// comment
}
if (0) {
/* comment */
}
if ((0, 0) /* comment */) {
}
================================================================================
`;
exports[`switch.js format 1`] = `
====================================options=====================================
parsers: ["babel", "flow", "typescript"]
printWidth: 80 (default) |
=====================================input======================================
switch(
true
// 1
) {}
switch(true)// 2
{}
switch(true)
// 22
{}
switch(true){}// 3
switch(true)/*4*/{}
switch(
true // 5
&& true // 52
){}
switch(true) {} // 6
switch (0) {// comment
}
switch (0) {
// comment
}
switch (0) {/* comment */}
switch ((0, 0/* comment */)) {}
=====================================output=====================================
switch (
true
// 1
) {
}
switch (
true // 2
) {
}
switch (
true
// 22
) {
}
switch (true) {
} // 3
switch (true /*4*/) {
}
switch (
true && // 5
true // 52
) {
}
switch (true) {
} // 6
switch (0) {
// comment
}
switch (0) {
// comment
}
switch (0) {
/* comment */
}
switch ((0, 0) /* comment */) {
}
================================================================================ ================================================================================
`; `;
@@ -77,6 +202,10 @@ while(
while(true)// 2 while(true)// 2
{} {}
while(true)
// 22
{}
while(true){}// 3 while(true){}// 3
while(true)/*4*/{} while(true)/*4*/{}
@@ -93,6 +222,17 @@ while(true) /* 7 */ ++x;
while(1) // 8 while(1) // 8
foo(); foo();
while (0) {// comment
}
while (0) {
// comment
}
while (0) {/* comment */}
while ((0, 0/* comment */)) {}
=====================================output===================================== =====================================output=====================================
while ( while (
true true
@@ -102,6 +242,10 @@ while (
while (true) // 2 while (true) // 2
{} {}
while (true)
// 22
{}
while (true) {} // 3 while (true) {} // 3
while (true) /*4*/ {} while (true) /*4*/ {}
@@ -119,6 +263,20 @@ while (1)
// 8 // 8
foo(); foo();
while (0) {
// comment
}
while (0) {
// comment
}
while (0) {
/* comment */
}
while ((0, 0) /* comment */) {}
================================================================================ ================================================================================
`; `;
@@ -135,6 +293,10 @@ with(
with(foo)// 2 with(foo)// 2
{} {}
with(foo)
// 22
{}
with(foo){}// 3 with(foo){}// 3
with(foo)/*4*/{} with(foo)/*4*/{}
@@ -151,6 +313,17 @@ with(foo) /* 7 */ ++x;
with(1) // 8 with(1) // 8
foo(); foo();
with (0) {// comment
}
with (0) {
// comment
}
with (0) {/* comment */}
with ((0, 0/* comment */)) {}
=====================================output===================================== =====================================output=====================================
with ( with (
foo foo
@@ -162,6 +335,11 @@ with (foo) // 2
{ {
} }
with (foo)
// 22
{
}
with (foo) { with (foo) {
} // 3 } // 3
@@ -183,5 +361,20 @@ with (1)
// 8 // 8
foo(); foo();
with (0) {
// comment
}
with (0) {
// comment
}
with (0) {
/* comment */
}
with ((0, 0) /* comment */) {
}
================================================================================ ================================================================================
`; `;
+15
View File
@@ -6,6 +6,10 @@ if(
if(true)// 2 if(true)// 2
{} {}
if(true)
// 22
{}
if(true){}// 3 if(true){}// 3
if(true)/*4*/{} if(true)/*4*/{}
@@ -21,3 +25,14 @@ if(true) /* 7 */ ++x;
if(1) // 8 if(1) // 8
foo(); foo();
if (0) {// comment
}
if (0) {
// comment
}
if (0) {/* comment */}
if ((0, 0/* comment */)) {}
@@ -0,0 +1,33 @@
switch(
true
// 1
) {}
switch(true)// 2
{}
switch(true)
// 22
{}
switch(true){}// 3
switch(true)/*4*/{}
switch(
true // 5
&& true // 52
){}
switch(true) {} // 6
switch (0) {// comment
}
switch (0) {
// comment
}
switch (0) {/* comment */}
switch ((0, 0/* comment */)) {}
@@ -6,6 +6,10 @@ while(
while(true)// 2 while(true)// 2
{} {}
while(true)
// 22
{}
while(true){}// 3 while(true){}// 3
while(true)/*4*/{} while(true)/*4*/{}
@@ -21,3 +25,14 @@ while(true) /* 7 */ ++x;
while(1) // 8 while(1) // 8
foo(); foo();
while (0) {// comment
}
while (0) {
// comment
}
while (0) {/* comment */}
while ((0, 0/* comment */)) {}
@@ -6,6 +6,10 @@ with(
with(foo)// 2 with(foo)// 2
{} {}
with(foo)
// 22
{}
with(foo){}// 3 with(foo){}// 3
with(foo)/*4*/{} with(foo)/*4*/{}
@@ -21,3 +25,14 @@ with(foo) /* 7 */ ++x;
with(1) // 8 with(1) // 8
foo(); foo();
with (0) {// comment
}
with (0) {
// comment
}
with (0) {/* comment */}
with ((0, 0/* comment */)) {}