Skip to content
This repository was archived by the owner on Jun 15, 2023. It is now read-only.

Commit 8066e11

Browse files
authored
Fix fragment optional children (#704)
1 parent 60469ed commit 8066e11

File tree

4 files changed

+50
-13
lines changed

4 files changed

+50
-13
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
- Fix issue where certain JSX expressions would be formatted differenctly in compiler 10.1.0-rc.1 https://github.com/rescript-lang/syntax/issues/675
4949
- Fix issue where printing nested pipe discards await https://github.com/rescript-lang/syntax/issues/687
5050
- Fix issue where the JSX key type is not an optional string https://github.com/rescript-lang/syntax/pull/693
51+
- Fix issue where the JSX fragment withouth children build error https://github.com/rescript-lang/syntax/pull/704
5152

5253
#### :eyeglasses: Spec Compliance
5354

cli/reactjs_jsx_v4.ml

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1368,24 +1368,22 @@ let expr ~config mapper expression =
13681368
Exp.ident ~loc {loc; txt = Ldot (Lident "React", "fragment")}
13691369
in
13701370
let childrenExpr = transformChildrenIfList ~mapper listItems in
1371+
let recordOfChildren children =
1372+
Exp.record [(Location.mknoloc (Lident "children"), children)] None
1373+
in
13711374
let args =
13721375
[
13731376
(nolabel, fragment);
13741377
(match config.mode with
1375-
| "automatic" ->
1378+
| "automatic" -> (
13761379
( nolabel,
1377-
Exp.record
1378-
[
1379-
( Location.mknoloc @@ Lident "children",
1380-
match childrenExpr with
1381-
| {pexp_desc = Pexp_array children} -> (
1382-
match children with
1383-
| [] -> emptyRecord ~loc:Location.none
1384-
| [child] -> child
1385-
| _ -> childrenExpr)
1386-
| _ -> childrenExpr );
1387-
]
1388-
None )
1380+
match childrenExpr with
1381+
| {pexp_desc = Pexp_array children} -> (
1382+
match children with
1383+
| [] -> emptyRecord ~loc:Location.none
1384+
| [child] -> recordOfChildren child
1385+
| _ -> recordOfChildren childrenExpr)
1386+
| _ -> recordOfChildren childrenExpr ))
13891387
| "classic" | _ -> (nolabel, childrenExpr));
13901388
]
13911389
in
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
@@jsxConfig({version: 4, mode: "classic"})
2+
3+
let _ = ReactDOM.createElement(React.fragment, [])
4+
let _ = ReactDOM.createElement(React.fragment, [ReactDOM.createDOMElementVariadic("div", [])])
5+
let _ = ReactDOM.createElement(React.fragment, [ReactDOM.createElement(React.fragment, [])])
6+
let _ = React.createElement(Z.make, {})
7+
let _ = React.createElement(Z.make, {children: ReactDOM.createDOMElementVariadic("div", [])})
8+
let _ = ReactDOM.createDOMElementVariadic("div", [])
9+
let _ = ReactDOM.createDOMElementVariadic("div", [ReactDOM.createDOMElementVariadic("div", [])])
10+
11+
@@jsxConfig({version: 4, mode: "automatic"})
12+
13+
let _ = React.jsx(React.jsxFragment, {})
14+
let _ = React.jsx(React.jsxFragment, {children: ReactDOM.jsx("div", {})})
15+
let _ = React.jsx(React.jsxFragment, {children: React.jsx(React.jsxFragment, {})})
16+
let _ = React.jsx(Z.make, {})
17+
let _ = React.jsx(Z.make, {children: ReactDOM.jsx("div", {})})
18+
let _ = ReactDOM.jsx("div", {})
19+
let _ = ReactDOM.jsx("div", {children: ?ReactDOM.someElement(ReactDOM.jsx("div", {}))})

tests/ppx/react/fragment.res

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
@@jsxConfig({version:4, mode: "classic"})
2+
3+
let _ = <></>
4+
let _ = <><div /></>
5+
let _ = <><></></>
6+
let _ = <Z />
7+
let _ = <Z><div /></Z>
8+
let _ = <div />
9+
let _ = <div><div /></div>
10+
11+
@@jsxConfig({version:4, mode: "automatic"})
12+
13+
let _ = <></>
14+
let _ = <><div /></>
15+
let _ = <><></></>
16+
let _ = <Z />
17+
let _ = <Z><div /></Z>
18+
let _ = <div />
19+
let _ = <div><div /></div>

0 commit comments

Comments
 (0)