diff --git a/src/res_core.ml b/src/res_core.ml
index 7474c61f..c0844bfc 100644
--- a/src/res_core.ml
+++ b/src/res_core.ml
@@ -618,7 +618,7 @@ let verifyJsxOpeningClosingName p nameExpr =
let closing = match p.Parser.token with
| Lident lident -> Parser.next p; Longident.Lident lident
| Uident _ ->
- (parseModuleLongIdent ~lowercase:false p).txt
+ (parseModuleLongIdent ~lowercase:true p).txt
| _ -> Longident.Lident ""
in
match nameExpr.Parsetree.pexp_desc with
@@ -2422,7 +2422,7 @@ and parseJsxName p =
let loc = mkLoc identStart identEnd in
Location.mkloc (Longident.Lident ident) loc
| Uident _ ->
- let longident = parseModuleLongIdent ~lowercase:false p in
+ let longident = parseModuleLongIdent ~lowercase:true p in
Location.mkloc (Longident.Ldot (longident.txt, "createElement")) longident.loc
| _ ->
let msg = "A jsx name should start with a lowercase or uppercase identifier, like: div in
or Navbar in "
diff --git a/tests/parsing/errors/expressions/__snapshots__/parse.spec.js.snap b/tests/parsing/errors/expressions/__snapshots__/parse.spec.js.snap
index 216e3097..2904b2f2 100644
--- a/tests/parsing/errors/expressions/__snapshots__/parse.spec.js.snap
+++ b/tests/parsing/errors/expressions/__snapshots__/parse.spec.js.snap
@@ -324,6 +324,82 @@ module LicenseList = struct end
I'm not sure what to parse here when looking at \\"}\\".
+========================================================"
+`;
+
+exports[`jsx.js 1`] = `
+"=====Parsetree==========================================
+let x = ((di ~children:[] ())[@JSX ]) - (v / ([%rescript.exprhole ]))
+let x = ((Unclosed.createElement ~children:[] ())[@JSX ])
+let x =
+ ((Foo.Bar.createElement ~children:[] ())[@JSX ]) > ([%rescript.exprhole ])
+let x =
+ ((Foo.Bar.Baz.createElement ~children:[] ())[@JSX ]) >
+ ([%rescript.exprhole ])
+let x =
+ ((Foo.bar.createElement ~children:[] ())[@JSX ]) > ([%rescript.exprhole ])
+let x =
+ ((Foo.bar.createElement ~baz:((baz)[@ns.namedArgLoc ]) ~children:[] ())
+ [@JSX ])
+=====Errors=============================================
+
+ Syntax error!
+ parsing/errors/expressions/jsx.js 1:12
+ 1 │ let x =
+ 2 │ let x = ;
+ 3 │ let x = ;
+
+ I'm not sure what to parse here when looking at \\"-\\".
+
+ Syntax error!
+ parsing/errors/expressions/jsx.js 2:20
+ 1 │ let x =
+ 2 │ let x = ;
+ 3 │ let x = ;
+ 4 │ let x =
+
+ Did you forget a \`\` here?
+
+ Syntax error!
+ parsing/errors/expressions/jsx.js 3:9-28
+ 1 │ let x =
+ 2 │ let x = ;
+ 3 │ let x = ;
+ 4 │ let x =
+ 5 │ let x =
+
+ Missing
+
+ Syntax error!
+ parsing/errors/expressions/jsx.js 4:9-34
+ 2 │ let x = ;
+ 3 │ let x = ;
+ 4 │ let x =
+ 5 │ let x =
+ 6 │ let x =
+
+ Missing
+
+ Syntax error!
+ parsing/errors/expressions/jsx.js 5:9-27
+ 3 │ let x = ;
+ 4 │ let x =
+ 5 │ let x =
+ 6 │ let x =
+ 7 │
+
+ Missing
+
+ Syntax error!
+ parsing/errors/expressions/jsx.js 6:17
+ 4 │ let x =
+ 5 │ let x =
+ 6 │ let x =
+ 7 │
+
+ I'm not sure what to parse here when looking at \\".\\".
+
+
========================================================"
`;
diff --git a/tests/parsing/errors/expressions/jsx.js b/tests/parsing/errors/expressions/jsx.js
new file mode 100644
index 00000000..b0fc1e86
--- /dev/null
+++ b/tests/parsing/errors/expressions/jsx.js
@@ -0,0 +1,6 @@
+let x =
+let x = ;
+let x = ;
+let x =
+let x =
+let x =
diff --git a/tests/parsing/grammar/expressions/__snapshots__/parse.spec.js.snap b/tests/parsing/grammar/expressions/__snapshots__/parse.spec.js.snap
index 9b0b4860..7023a8fe 100644
--- a/tests/parsing/grammar/expressions/__snapshots__/parse.spec.js.snap
+++ b/tests/parsing/grammar/expressions/__snapshots__/parse.spec.js.snap
@@ -541,7 +541,42 @@ let _ =
~children:[] ())
[@JSX ])
let _ = ((Navbar.createElement ~children:[] ())[@JSX ])
-let _ = ((Nav.Navbar.createElement ~children:[] ())[@JSX ])
+let _ = ((Navbar.createElement ~children:[] ())[@JSX ])
+let _ = ((Navbar.createElement ~children:[] ())[@JSX ])
+let _ =
+ ((Navbar.createElement ~className:((\\"menu\\")[@ns.namedArgLoc ]) ~children:[]
+ ())
+ [@JSX ])
+let _ = ((Dot.Up.createElement ~children:[] ())[@JSX ])
+let _ = ((Dot.Up.createElement ~children:[] ())[@JSX ])
+let _ = ((Dot.Up.createElement ~children:[] ())[@JSX ])
+let _ =
+ ((Dot.Up.createElement
+ ~children:[((Dot.low.createElement ~children:[] ())[@JSX ])] ())
+ [@JSX ])
+let _ =
+ ((Dot.Up.createElement
+ ~children:[((Dot.Up.createElement ~children:[] ())[@JSX ])] ())
+ [@JSX ])
+let _ =
+ ((Dot.Up.createElement ~className:((\\"menu\\")[@ns.namedArgLoc ]) ~children:[]
+ ())
+ [@JSX ])
+let _ = ((Dot.low.createElement ~children:[] ())[@JSX ])
+let _ = ((Dot.low.createElement ~children:[] ())[@JSX ])
+let _ = ((Dot.low.createElement ~children:[] ())[@JSX ])
+let _ =
+ ((Dot.low.createElement
+ ~children:[((Dot.Up.createElement ~children:[] ())[@JSX ])] ())
+ [@JSX ])
+let _ =
+ ((Dot.low.createElement
+ ~children:[((Dot.low.createElement ~children:[] ())[@JSX ])] ())
+ [@JSX ])
+let _ =
+ ((Dot.low.createElement ~className:((\\"menu\\")[@ns.namedArgLoc ])
+ ~children:[] ())
+ [@JSX ])
let _ = ((el ~punned:((punned)[@ns.namedArgLoc ]) ~children:[] ())[@JSX ])
let _ = ((el ?punned:((punned)[@ns.namedArgLoc ]) ~children:[] ())[@JSX ])
let _ = ((el ~punned:((punned)[@ns.namedArgLoc ]) ~children:[] ())[@JSX ])
diff --git a/tests/parsing/grammar/expressions/jsx.js b/tests/parsing/grammar/expressions/jsx.js
index 12dac708..9de13d8b 100644
--- a/tests/parsing/grammar/expressions/jsx.js
+++ b/tests/parsing/grammar/expressions/jsx.js
@@ -18,8 +18,24 @@ let _ =
let _ = Js.log("click")}>
let _ = Js.log("click")}>
+let _ =
let _ =
-let _ =
+let _ =
+let _ =
+
+let _ =
+let _ =
+let _ =
+let _ =
+let _ =
+let _ =
+
+let _ =
+let _ =
+let _ =
+let _ =
+let _ =
+let _ =
// punning
let _ =
diff --git a/tests/printer/expr/__snapshots__/render.spec.js.snap b/tests/printer/expr/__snapshots__/render.spec.js.snap
index 8ca27d96..18fe902a 100644
--- a/tests/printer/expr/__snapshots__/render.spec.js.snap
+++ b/tests/printer/expr/__snapshots__/render.spec.js.snap
@@ -2420,6 +2420,8 @@ exports[`jsx.js 1`] = `
let x =
let x =
let x =
+let x =
+let x =
let x =
let x =
let x =
+let x =
+let x =
let x =