From 2f6e75b8c41d0e27169baf321873abaf65943a7d Mon Sep 17 00:00:00 2001 From: Ika Date: Sat, 10 Nov 2018 16:37:17 +0800 Subject: [PATCH 1/3] test: add tests --- .../babylon_only/__snapshots__/jsfmt.spec.js.snap | 13 +++++++++++++ tests/flow_comments/babylon_only/functions.js | 5 +++++ 2 files changed, 18 insertions(+) create mode 100644 tests/flow_comments/babylon_only/functions.js 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..a74e1d2154cb 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,16 @@ 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}*/ +) {} From 4e0cbaddb8727763603e290d7788b68ab3500a83 Mon Sep 17 00:00:00 2001 From: Ika Date: Sat, 10 Nov 2018 16:40:35 +0800 Subject: [PATCH 2/3] fix(javascript): do not attach to block if it's not behind right func paren --- src/common/util.js | 11 ++++++-- src/language-js/comments.js | 26 +++++++++++++++++-- .../__snapshots__/jsfmt.spec.js.snap | 7 ++--- 3 files changed, 37 insertions(+), 7 deletions(-) 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..5e2ebccd0d3b 100644 --- a/src/language-js/comments.js +++ b/src/language-js/comments.js @@ -7,6 +7,10 @@ const { addTrailingComment, addDanglingComment } = sharedUtil; +const { + getLast, + getNextNonSpaceNonCommentCharacterIndexWithStartIndex +} = require("../common/util"); function handleOwnLineComment(comment, text, options, ast, isLastComment) { const { precedingNode, enclosingNode, followingNode } = comment; @@ -630,8 +634,26 @@ function handleLastFunctionArgComments( followingNode && followingNode.type === "BlockStatement" ) { - addBlockStatementFirstComment(followingNode, comment); - return true; + const functionParamRightParenIndex = (() => { + if (enclosingNode.params.length !== 0) { + return getNextNonSpaceNonCommentCharacterIndexWithStartIndex( + text, + options.locEnd(getLast(enclosingNode.params)) + ); + } + const functionParamLeftParenIndex = getNextNonSpaceNonCommentCharacterIndexWithStartIndex( + text, + options.locEnd(enclosingNode.id) + ); + return 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 a74e1d2154cb..26a6ee23fc97 100644 --- a/tests/flow_comments/babylon_only/__snapshots__/jsfmt.spec.js.snap +++ b/tests/flow_comments/babylon_only/__snapshots__/jsfmt.spec.js.snap @@ -34,8 +34,9 @@ export function updateStoreFromURL( {search, hash} /*: {search: string, hash: string}*/ ) {} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -export function updateStoreFromURL(store /*: Store*/, { search, hash }) { - /*: {search: string, hash: string}*/ -} +export function updateStoreFromURL( + store /*: Store*/, + { search, hash } /*: {search: string, hash: string}*/ +) {} `; From d772ae83d3c941714dc089dacbf88ab3e9f75a24 Mon Sep 17 00:00:00 2001 From: Ika Date: Sat, 10 Nov 2018 16:48:56 +0800 Subject: [PATCH 3/3] refactor --- src/language-js/comments.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/language-js/comments.js b/src/language-js/comments.js index 5e2ebccd0d3b..50ee0e9e2942 100644 --- a/src/language-js/comments.js +++ b/src/language-js/comments.js @@ -7,10 +7,6 @@ const { addTrailingComment, addDanglingComment } = sharedUtil; -const { - getLast, - getNextNonSpaceNonCommentCharacterIndexWithStartIndex -} = require("../common/util"); function handleOwnLineComment(comment, text, options, ast, isLastComment) { const { precedingNode, enclosingNode, followingNode } = comment; @@ -636,16 +632,16 @@ function handleLastFunctionArgComments( ) { const functionParamRightParenIndex = (() => { if (enclosingNode.params.length !== 0) { - return getNextNonSpaceNonCommentCharacterIndexWithStartIndex( + return privateUtil.getNextNonSpaceNonCommentCharacterIndexWithStartIndex( text, - options.locEnd(getLast(enclosingNode.params)) + options.locEnd(privateUtil.getLast(enclosingNode.params)) ); } - const functionParamLeftParenIndex = getNextNonSpaceNonCommentCharacterIndexWithStartIndex( + const functionParamLeftParenIndex = privateUtil.getNextNonSpaceNonCommentCharacterIndexWithStartIndex( text, options.locEnd(enclosingNode.id) ); - return getNextNonSpaceNonCommentCharacterIndexWithStartIndex( + return privateUtil.getNextNonSpaceNonCommentCharacterIndexWithStartIndex( text, functionParamLeftParenIndex + 1 );