From 299e51298c52ae24d1bef1d953348f626837941e Mon Sep 17 00:00:00 2001 From: Damien Maillard Date: Thu, 23 Mar 2017 16:55:14 +0100 Subject: [PATCH] Fix path.remove() leading & trailing comments sharing (#5504) --- .../lowercase-member-expression/expected.js | 3 ++- packages/babel-traverse/package.json | 3 ++- packages/babel-traverse/src/path/comments.js | 23 +++++++++++------- .../fixtures/comments/attachment/actual.js | 24 +++++++++++++++++++ .../fixtures/comments/attachment/expected.js | 20 ++++++++++++++++ .../fixtures/comments/attachment/options.json | 3 +++ .../fixtures/comments/attachment/remove.js | 12 ++++++++++ packages/babel-traverse/test/index.js | 3 +++ 8 files changed, 81 insertions(+), 10 deletions(-) create mode 100644 packages/babel-traverse/test/fixtures/comments/attachment/actual.js create mode 100644 packages/babel-traverse/test/fixtures/comments/attachment/expected.js create mode 100644 packages/babel-traverse/test/fixtures/comments/attachment/options.json create mode 100644 packages/babel-traverse/test/fixtures/comments/attachment/remove.js create mode 100644 packages/babel-traverse/test/index.js diff --git a/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/lowercase-member-expression/expected.js b/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/lowercase-member-expression/expected.js index 6f90f33e19..27a9501e65 100644 --- a/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/lowercase-member-expression/expected.js +++ b/packages/babel-plugin-transform-react-inline-elements/test/fixtures/inline-elements/lowercase-member-expression/expected.js @@ -2,6 +2,7 @@ var _export = require("./export"); +//index.js file function ParentComponent() { return babelHelpers.jsx(_export.form.TestComponent, {}); -} //index.js file \ No newline at end of file +} diff --git a/packages/babel-traverse/package.json b/packages/babel-traverse/package.json index 3285eccff3..c64e8106e2 100644 --- a/packages/babel-traverse/package.json +++ b/packages/babel-traverse/package.json @@ -18,6 +18,7 @@ "lodash": "^4.2.0" }, "devDependencies": { - "babel-generator": "7.0.0-alpha.1" + "babel-generator": "7.0.0-alpha.1", + "babel-helper-plugin-test-runner": "^7.0.0-alpha.1" } } diff --git a/packages/babel-traverse/src/path/comments.js b/packages/babel-traverse/src/path/comments.js index ab2bda2cec..de78503af6 100644 --- a/packages/babel-traverse/src/path/comments.js +++ b/packages/babel-traverse/src/path/comments.js @@ -15,14 +15,17 @@ export function shareCommentsWithSiblings() { const leading = node.leadingComments; if (!trailing && !leading) return; - let prev = this.getSibling(this.key - 1); - let next = this.getSibling(this.key + 1); + const prev = this.getSibling(this.key - 1); + const next = this.getSibling(this.key + 1); + const hasPrev = Boolean(prev.node); + const hasNext = Boolean(next.node); + if (hasPrev && hasNext) { - if (!prev.node) prev = next; - if (!next.node) next = prev; - - prev.addComments("trailing", leading); - next.addComments("leading", trailing); + } else if (hasPrev) { + prev.addComments("trailing", trailing); + } else if (hasNext) { + next.addComments("leading", leading); + } } export function addComment(type, content, line?) { @@ -45,7 +48,11 @@ export function addComments(type: string, comments: Array) { const key = `${type}Comments`; if (node[key]) { - node[key] = node[key].concat(comments); + if (type === "leading") { + node[key] = comments.concat(node[key]); + } else { + node[key] = node[key].concat(comments); + } } else { node[key] = comments; } diff --git a/packages/babel-traverse/test/fixtures/comments/attachment/actual.js b/packages/babel-traverse/test/fixtures/comments/attachment/actual.js new file mode 100644 index 0000000000..a158115986 --- /dev/null +++ b/packages/babel-traverse/test/fixtures/comments/attachment/actual.js @@ -0,0 +1,24 @@ +{ + /* top */ + /* left */willRemove;/* right */ + /* bottom */ +} +{ + hasPrev; + /* top */ + /* left */willRemove;/* right */ + /* bottom */ +} +{ + /* top */ + /* left */willRemove;/* right */ + /* bottom */ + hasNext; +} +{ + hasPrev; + /* top */ + /* left */willRemove;/* right */ + /* bottom */ + hasNext; +} diff --git a/packages/babel-traverse/test/fixtures/comments/attachment/expected.js b/packages/babel-traverse/test/fixtures/comments/attachment/expected.js new file mode 100644 index 0000000000..db60fa9418 --- /dev/null +++ b/packages/babel-traverse/test/fixtures/comments/attachment/expected.js @@ -0,0 +1,20 @@ +{} +{ + hasPrev; + /* top */ + /* left */ /* right */ + /* bottom */ +} +{ + /* top */ + /* left */ /* right */ + /* bottom */ + hasNext; +} +{ + hasPrev; + /* top */ + /* left */ /* right */ + /* bottom */ + hasNext; +} \ No newline at end of file diff --git a/packages/babel-traverse/test/fixtures/comments/attachment/options.json b/packages/babel-traverse/test/fixtures/comments/attachment/options.json new file mode 100644 index 0000000000..41e45fedba --- /dev/null +++ b/packages/babel-traverse/test/fixtures/comments/attachment/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["./remove"] +} diff --git a/packages/babel-traverse/test/fixtures/comments/attachment/remove.js b/packages/babel-traverse/test/fixtures/comments/attachment/remove.js new file mode 100644 index 0000000000..6312a4d351 --- /dev/null +++ b/packages/babel-traverse/test/fixtures/comments/attachment/remove.js @@ -0,0 +1,12 @@ +module.exports = function() { + return { + visitor: { + Identifier(path) { + const node = path.node; + if (node.name === "willRemove") { + path.remove(); + } + }, + }, + }; +}; diff --git a/packages/babel-traverse/test/index.js b/packages/babel-traverse/test/index.js new file mode 100644 index 0000000000..09cfbc31f5 --- /dev/null +++ b/packages/babel-traverse/test/index.js @@ -0,0 +1,3 @@ +import runner from "babel-helper-plugin-test-runner"; + +runner(__dirname);