diff --git a/src/common/util.js b/src/common/util.js index f6d22b65fd73..86d483bdb61f 100644 --- a/src/common/util.js +++ b/src/common/util.js @@ -196,9 +196,8 @@ function isNextLineEmpty(text, node, locEnd) { return isNextLineEmptyAfterIndex(text, locEnd(node)); } -function getNextNonSpaceNonCommentCharacterIndex(text, node, locEnd) { +function getNextNonSpaceNonCommentCharacterIndexWithStartIndex(text, idx) { let oldIdx = null; - let idx = locEnd(node); while (idx !== oldIdx) { oldIdx = idx; idx = skipSpaces(text, idx); @@ -209,6 +208,13 @@ function getNextNonSpaceNonCommentCharacterIndex(text, node, locEnd) { return idx; } +function getNextNonSpaceNonCommentCharacterIndex(text, node, locEnd) { + return getNextNonSpaceNonCommentCharacterIndexWithStartIndex( + text, + locEnd(node) + ); +} + function getNextNonSpaceNonCommentCharacter(text, node, locEnd) { return text.charAt( getNextNonSpaceNonCommentCharacterIndex(text, node, locEnd) @@ -679,6 +685,7 @@ module.exports = { getParentExportDeclaration, getPenultimate, getLast, + getNextNonSpaceNonCommentCharacterIndexWithStartIndex, getNextNonSpaceNonCommentCharacterIndex, getNextNonSpaceNonCommentCharacter, skip, diff --git a/src/language-js/comments.js b/src/language-js/comments.js index 784bff9a00b0..50ee0e9e2942 100644 --- a/src/language-js/comments.js +++ b/src/language-js/comments.js @@ -630,8 +630,26 @@ function handleLastFunctionArgComments( followingNode && followingNode.type === "BlockStatement" ) { - addBlockStatementFirstComment(followingNode, comment); - return true; + const functionParamRightParenIndex = (() => { + if (enclosingNode.params.length !== 0) { + return privateUtil.getNextNonSpaceNonCommentCharacterIndexWithStartIndex( + text, + options.locEnd(privateUtil.getLast(enclosingNode.params)) + ); + } + const functionParamLeftParenIndex = privateUtil.getNextNonSpaceNonCommentCharacterIndexWithStartIndex( + text, + options.locEnd(enclosingNode.id) + ); + return privateUtil.getNextNonSpaceNonCommentCharacterIndexWithStartIndex( + text, + functionParamLeftParenIndex + 1 + ); + })(); + if (options.locStart(comment) > functionParamRightParenIndex) { + addBlockStatementFirstComment(followingNode, comment); + return true; + } } return false; diff --git a/tests/flow_comments/babylon_only/__snapshots__/jsfmt.spec.js.snap b/tests/flow_comments/babylon_only/__snapshots__/jsfmt.spec.js.snap index 216786ceb7df..26a6ee23fc97 100644 --- a/tests/flow_comments/babylon_only/__snapshots__/jsfmt.spec.js.snap +++ b/tests/flow_comments/babylon_only/__snapshots__/jsfmt.spec.js.snap @@ -26,3 +26,17 @@ class Component extends React.Component /*:: */ { } `; + +exports[`functions.js - babylon-verify 1`] = ` + +export function updateStoreFromURL( + store /*: Store*/, + {search, hash} /*: {search: string, hash: string}*/ +) {} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +export function updateStoreFromURL( + store /*: Store*/, + { search, hash } /*: {search: string, hash: string}*/ +) {} + +`; diff --git a/tests/flow_comments/babylon_only/functions.js b/tests/flow_comments/babylon_only/functions.js new file mode 100644 index 000000000000..efd9e77084d8 --- /dev/null +++ b/tests/flow_comments/babylon_only/functions.js @@ -0,0 +1,5 @@ + +export function updateStoreFromURL( + store /*: Store*/, + {search, hash} /*: {search: string, hash: string}*/ +) {}