Skip to content

Commit d6d2126

Browse files
committed
add broken dict pattern parsing test
1 parent 8717372 commit d6d2126

File tree

2 files changed

+75
-12
lines changed

2 files changed

+75
-12
lines changed
Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,47 @@
11
let someDict = dict{
2-
"one": "one",
2+
"one": "one",
33
}
44

55
let dict{"one": ?one} = someDict
66

77
let foo = () => switch someDict {
88
| dict{"one": "one"} => Js.log("one")
99
| _ => Js.log("not one")
10-
}
10+
}
11+
12+
@unboxed
13+
type rec json =
14+
| Boolean(bool)
15+
| @as(null) Null
16+
| String(string)
17+
| Number(float)
18+
| Object(dict<json>)
19+
| Array(array<t>)
20+
21+
type user = {
22+
name: string,
23+
age?: float,
24+
}
25+
26+
let decodeUser = (json: json): option<user> => {
27+
switch json {
28+
| Object(dict{
29+
"name": String(name),
30+
"age": ageJson
31+
}) =>
32+
Some({
33+
name,
34+
age: ?switch ageJson {
35+
| Number(age) => Some(age)
36+
| _ =>
37+
/* Invalid age JSON type */
38+
None
39+
},
40+
})
41+
| _ =>
42+
Js.log("Not an object.")
43+
None
44+
}
45+
}
46+
47+
Js.log(decodeUser(jsonParse(`{"name": "John", "age": 30}`)))
Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,36 @@
1-
let someDict = Primitive_dict.make [|("one", {js|one|js})|]
2-
let (({ one = ((one)[@res.optional ]);_})[@res.dictPattern ]) = someDict
3-
let foo =
4-
((Function$
5-
(fun () ->
6-
match someDict with
7-
| (({ one = {js|one|js};_})[@res.dictPattern ]) ->
8-
Js.log {js|one|js}
9-
| _ -> Js.log {js|not one|js}))
10-
[@res.arity 1])
1+
2+
Syntax error!
3+
tests/parsing/grammar/pattern/dict.res:28:12-16
4+
5+
26 │ let decodeUser = (json: json): option<user> => {
6+
27 │ switch json {
7+
28 │ | Object(dict{
8+
29 │ "name": String(name),
9+
30 │ "age": ageJson
10+
11+
Did you forget a `)` here?
12+
13+
14+
Syntax error!
15+
tests/parsing/grammar/pattern/dict.res:31:6
16+
17+
29 ┆ "name": String(name),
18+
30 ┆ "age": ageJson
19+
31 ┆ }) =>
20+
32 ┆ Some({
21+
33 ┆ name,
22+
23+
I'm not sure what to parse here when looking at ")".
24+
25+
26+
Syntax error!
27+
tests/parsing/grammar/pattern/dict.res:41:3
28+
29+
39 ┆ },
30+
40 ┆ })
31+
41 ┆ | _ =>
32+
42 ┆ Js.log("Not an object.")
33+
43 ┆ None
34+
35+
I'm not sure what to parse here when looking at "|".
36+

0 commit comments

Comments
 (0)