diff --git a/src/comments.js b/src/comments.js index 24e94a10..89d318fd 100644 --- a/src/comments.js +++ b/src/comments.js @@ -145,7 +145,8 @@ function attach(comments, ast, text, options) { if ( handleMemberExpressionComments(enclosingNode, followingNode, comment) || handleIfStatementComments(enclosingNode, followingNode, comment) || - handleTryStatementComments(enclosingNode, followingNode, comment) + handleTryStatementComments(enclosingNode, followingNode, comment) || + handleClassComments(enclosingNode, comment) ) { // We're good } else if (followingNode) { @@ -168,7 +169,8 @@ function attach(comments, ast, text, options) { comment, text ) || - handleTemplateLiteralComments(enclosingNode, comment) + handleTemplateLiteralComments(enclosingNode, comment) || + handleClassComments(enclosingNode, comment) ) { // We're good } else if (precedingNode) { @@ -454,6 +456,16 @@ function handleFunctionDeclarationComments(enclosingNode, comment) { return false; } +function handleClassComments(enclosingNode, comment) { + if (enclosingNode && + (enclosingNode.type === "ClassDeclaration" || + enclosingNode.type === "ClassExpression")) { + addLeadingComment(enclosingNode, comment); + return true; + } + return false; +} + function printComment(commentPath) { const comment = commentPath.getValue(); comment.printed = true; diff --git a/tests/class_comment/__snapshots__/jsfmt.spec.js.snap b/tests/class_comment/__snapshots__/jsfmt.spec.js.snap new file mode 100644 index 00000000..0fb2c394 --- /dev/null +++ b/tests/class_comment/__snapshots__/jsfmt.spec.js.snap @@ -0,0 +1,58 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`comments.js 1`] = ` +"class A // comment 1 + // comment 2 + extends B {} + +class A extends B // comment1 +// comment2 +// comment3 +{} + +class A /* a */ extends B {} +class A extends B /* a */ {} +class A extends /* a */ B {} + +(class A // comment 1 + // comment 2 + extends B {}); + +(class A extends B // comment1 +// comment2 +// comment3 +{}); + +(class A /* a */ extends B {}); +(class A extends B /* a */ {}); +(class A extends /* a */ B {}); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// comment 1 +// comment 2 +class A extends B {} + +// comment1 +// comment2 +// comment3 +class A extends B {} + +class A /* a */ extends B {} +class A extends B /* a */ { +} +class A extends /* a */ B {} + +// comment 1 +// comment 2 +(class A extends B {}); + +// comment1 +// comment2 +// comment3 +(class A extends B {}); + +(class A /* a */ extends B {}); +(class A extends B /* a */ { +}); +(class A extends /* a */ B {}); +" +`; diff --git a/tests/class_comment/comments.js b/tests/class_comment/comments.js new file mode 100644 index 00000000..133245cc --- /dev/null +++ b/tests/class_comment/comments.js @@ -0,0 +1,25 @@ +class A // comment 1 + // comment 2 + extends B {} + +class A extends B // comment1 +// comment2 +// comment3 +{} + +class A /* a */ extends B {} +class A extends B /* a */ {} +class A extends /* a */ B {} + +(class A // comment 1 + // comment 2 + extends B {}); + +(class A extends B // comment1 +// comment2 +// comment3 +{}); + +(class A /* a */ extends B {}); +(class A extends B /* a */ {}); +(class A extends /* a */ B {}); diff --git a/tests/class_comment/jsfmt.spec.js b/tests/class_comment/jsfmt.spec.js new file mode 100644 index 00000000..989047bc --- /dev/null +++ b/tests/class_comment/jsfmt.spec.js @@ -0,0 +1 @@ +run_spec(__dirname);