Fix parentheses on replaceWithMultiple for JSX (#10598)

* Closes #9851 Fix parentheses on replaceWithMultiple for JSX

* Rename test

* Use generate(ast) directly
This commit is contained in:
Kenza Houmani 2019-11-11 09:36:17 +00:00 committed by Nicolò Ribaudo
parent 70c0ed512a
commit 2b082601a7
2 changed files with 19 additions and 1 deletions

View File

@ -115,7 +115,9 @@ export function insertAfter(nodes) {
}), }),
); );
} else if ( } else if (
(this.isNodeType("Expression") && !this.isJSXElement()) || (this.isNodeType("Expression") &&
!this.isJSXElement() &&
!parentPath.isJSXElement()) ||
(parentPath.isForStatement() && this.key === "init") (parentPath.isForStatement() && this.key === "init")
) { ) {
if (this.node) { if (this.node) {

View File

@ -1,5 +1,6 @@
import traverse from "../lib"; import traverse from "../lib";
import { parse } from "@babel/parser"; import { parse } from "@babel/parser";
import generate from "@babel/generator";
import * as t from "@babel/types"; import * as t from "@babel/types";
describe("path/replacement", function() { describe("path/replacement", function() {
@ -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>;");
});
});
}); });