Add JSX Fragment syntax support (#6552)

* Add JSX Fragments to babel-types

* Support JSX fragments in the transform-react-jsx plugin

* Add tests JSX fragments

* Update helper-builder and transform plugin documentations for jsx fragment

* Add generator for jsx fragments

* Add test for jsx fragment generator

* Split jsx transform example into normal and fragment examples

* Remove unnecessary fields from ElementState in babel-helper-builder-react-jsx

* inline [skip ci]
This commit is contained in:
Clement Hoang
2017-11-03 07:43:48 -07:00
committed by Henry Zhu
parent 9e2828322e
commit 1a7194a22f
20 changed files with 322 additions and 29 deletions

View File

@@ -16,6 +16,7 @@ defineType("JSXAttribute", {
optional: true,
validate: assertNodeType(
"JSXElement",
"JSXFragment",
"StringLiteral",
"JSXExpressionContainer",
),
@@ -54,6 +55,7 @@ defineType("JSXElement", {
"JSXExpressionContainer",
"JSXSpreadChild",
"JSXElement",
"JSXFragment",
),
),
),
@@ -161,3 +163,39 @@ defineType("JSXText", {
},
},
});
defineType("JSXFragment", {
builder: ["openingFragment", "closingFragment", "children"],
visitor: ["openingFragment", "children", "closingFragment"],
aliases: ["JSX", "Immutable", "Expression"],
fields: {
openingFragment: {
validate: assertNodeType("JSXOpeningFragment"),
},
closingFragment: {
validate: assertNodeType("JSXClosingFragment"),
},
children: {
validate: chain(
assertValueType("array"),
assertEach(
assertNodeType(
"JSXText",
"JSXExpressionContainer",
"JSXSpreadChild",
"JSXElement",
"JSXFragment",
),
),
),
},
},
});
defineType("JSXOpeningFragment", {
aliases: ["JSX", "Immutable"],
});
defineType("JSXClosingFragment", {
aliases: ["JSX", "Immutable"],
});