Skip to content

Commit

Permalink
Fix parentheses on replaceWithMultiple for JSX (#10598)
Browse files Browse the repository at this point in the history
* Closes #9851 Fix parentheses on replaceWithMultiple for JSX

* Rename test

* Use generate(ast) directly
  • Loading branch information
khoumani authored and nicolo-ribaudo committed Nov 11, 2019
1 parent 70c0ed5 commit 2b08260
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
4 changes: 3 additions & 1 deletion packages/babel-traverse/src/path/modification.js
Expand Up @@ -115,7 +115,9 @@ export function insertAfter(nodes) {
}),
);
} else if (
(this.isNodeType("Expression") && !this.isJSXElement()) ||
(this.isNodeType("Expression") &&
!this.isJSXElement() &&
!parentPath.isJSXElement()) ||
(parentPath.isForStatement() && this.key === "init")
) {
if (this.node) {
Expand Down
16 changes: 16 additions & 0 deletions packages/babel-traverse/test/replacement.js
@@ -1,5 +1,6 @@
import traverse from "../lib";
import { parse } from "@babel/parser";
import generate from "@babel/generator";
import * as t from "@babel/types";

describe("path/replacement", function() {
Expand Down Expand Up @@ -97,4 +98,19 @@ describe("path/replacement", function() {
);
});
});
describe("replaceWithMultiple", () => {
it("does not add extra parentheses for a JSXElement with a JSXElement parent", () => {
const ast = parse(`<div><span><p></p><h></h></span></div>`, {
plugins: ["jsx"],
});
traverse(ast, {
JSXElement: path => {
if (path.node.openingElement.name.name === "span") {
path.replaceWithMultiple(path.node.children.filter(t.isJSXElement));
}
},
});
expect(generate(ast).code).toBe("<div><p></p><h></h></div>;");
});
});
});

0 comments on commit 2b08260

Please sign in to comment.