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 \` + 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 =