diff --git a/src/res_core.ml b/src/res_core.ml index 94022348..583fad59 100644 --- a/src/res_core.ml +++ b/src/res_core.ml @@ -583,6 +583,7 @@ let rec parseLident p = loop p end in + Parser.err p (Diagnostics.lident p.Parser.token); Parser.next p; loop p; match p.Parser.token with diff --git a/tests/parsing/errors/expressions/expected/letBinding.res.txt b/tests/parsing/errors/expressions/expected/letBinding.res.txt index 7d6d3a9a..74a4dbbc 100644 --- a/tests/parsing/errors/expressions/expected/letBinding.res.txt +++ b/tests/parsing/errors/expressions/expected/letBinding.res.txt @@ -68,9 +68,21 @@ This let-binding misses an expression + + Syntax error! + tests/parsing/errors/expressions/letBinding.res:15:12 + + 13 │ } + 14 │ + 15 │ let foo as 'x = () + 16 │ + + I'm expecting a lowercase name like `user or `age` + let foo = 2. let foo = true let foo = 2 let foo = f () let foo = ((2)[@ns.braces ]) -let foo = (("foo")[@ns.braces ]) \ No newline at end of file +let foo = (("foo")[@ns.braces ]) +let foo as x = () \ No newline at end of file diff --git a/tests/parsing/errors/expressions/letBinding.res b/tests/parsing/errors/expressions/letBinding.res index eba4f299..84172372 100644 --- a/tests/parsing/errors/expressions/letBinding.res +++ b/tests/parsing/errors/expressions/letBinding.res @@ -12,3 +12,4 @@ let foo = == { "foo" } +let foo as 'x = () diff --git a/tests/parsing/errors/other/expected/labelledParameters.res.txt b/tests/parsing/errors/other/expected/labelledParameters.res.txt index 43a9004c..886996e1 100644 --- a/tests/parsing/errors/other/expected/labelledParameters.res.txt +++ b/tests/parsing/errors/other/expected/labelledParameters.res.txt @@ -4,7 +4,7 @@ 1 │ let f = (x, y=2, z) => x + y + z 2 │ - 3 │ type f = (x: int, y: int) => int + 3 │ let g = (~?x, ~y=2, ~z) => x + y + z A labeled parameter starts with a `~`. Did you mean: `~y`? @@ -14,10 +14,24 @@ 1 │ let f = (x, y=2, z) => x + y + z 2 │ - 3 │ type f = (x: int, y: int) => int + 3 │ let g = (~?x, ~y=2, ~z) => x + y + z 4 │ + 5 │ type f = (x: int, y: int) => int + + I'm expecting a lowercase name like `user or `age` + + + Syntax error! + tests/parsing/errors/other/labelledParameters.res:5:11 + + 3 │ let g = (~?x, ~y=2, ~z) => x + y + z + 4 │ + 5 │ type f = (x: int, y: int) => int + 6 │ A labeled parameter starts with a `~`. Did you mean: `~x`? let f x ?(y= 2) z = (x + y) + z +let g ~x:((x)[@ns.namedArgLoc ]) ?y:(((y)[@ns.namedArgLoc ])= 2) + ~z:((z)[@ns.namedArgLoc ]) = (x + y) + z type nonrec f = x:int -> y:int -> int \ No newline at end of file diff --git a/tests/parsing/errors/other/labelledParameters.res b/tests/parsing/errors/other/labelledParameters.res index 931151b5..63cceaff 100644 --- a/tests/parsing/errors/other/labelledParameters.res +++ b/tests/parsing/errors/other/labelledParameters.res @@ -1,3 +1,5 @@ let f = (x, y=2, z) => x + y + z +let g = (~?x, ~y=2, ~z) => x + y + z + type f = (x: int, y: int) => int diff --git a/tests/printer/comments/pattern.res b/tests/printer/comments/pattern.res index 0c25638b..25442439 100644 --- a/tests/printer/comments/pattern.res +++ b/tests/printer/comments/pattern.res @@ -11,7 +11,7 @@ let /* before */ 123 /* after */ = 123 // Ppat_interval of constant * constant // Ppat_alias -let /* before pat */ p /* after pat */ as /* before alias */ 'x /* after alias */ = () +let /* before pat */ p /* after pat */ as /* before alias */ x /* after alias */ = () let /*c0 */ (/* c1 */ p /* c2 */ as /* c3 */x /* c4*/) as /* c5 */ y /* c6 */ = () // Ppat_array