Skip to content

Commit 91fe20e

Browse files
committed
tests, also the parser is broken for empty arrays
1 parent d2c02ea commit 91fe20e

File tree

4 files changed

+40
-23
lines changed

4 files changed

+40
-23
lines changed

src/metadata/mod.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,18 @@ mod tests {
7777
5
7878
-5
7979
6.02e27
80+
nil
81+
{
82+
x: y
83+
a: [
84+
b
85+
]
86+
}
87+
[]
88+
[
89+
hi
90+
hi
91+
]
8092
]",
8193
]
8294
.into_iter()

src/metadata/snapshots/rust_norg__metadata__tests__arrays.snap

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,10 @@ expression: examples
1818
- Num: 5
1919
- Num: -5
2020
- Num: 6020000000000000000000000000
21+
- Nil
22+
- Object:
23+
a:
24+
Array:
25+
- Str: b
26+
x:
27+
Str: y

src/metadata/stage_1.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,12 @@ pub fn meta_parser() -> impl Parser<char, NorgMeta, Error = Simple<char>> {
7878
Ok(s.to_string())
7979
}
8080
})
81-
.labelled("string");
81+
.map(|s| match &s[..] {
82+
"true" => NorgMeta::Bool(true),
83+
"false" => NorgMeta::Bool(false),
84+
"nil" => NorgMeta::Nil,
85+
_ => NorgMeta::Str(s),
86+
});
8287

8388
let key = none_of(SPECIAL)
8489
.repeated()
@@ -97,6 +102,11 @@ pub fn meta_parser() -> impl Parser<char, NorgMeta, Error = Simple<char>> {
97102
.map(NorgMeta::Array)
98103
.labelled("array");
99104

105+
let empty_array = empty()
106+
.padded()
107+
.delimited_by(just('['), just(']'))
108+
.to(NorgMeta::Array(vec![]));
109+
100110
let property = key
101111
.clone()
102112
.then_ignore(one_of(" \n\t").or_not())
@@ -115,14 +125,12 @@ pub fn meta_parser() -> impl Parser<char, NorgMeta, Error = Simple<char>> {
115125
.labelled("object");
116126

117127
choice((
118-
just("nil").to(NorgMeta::Nil).labelled("nil"),
119-
just("true").to(NorgMeta::Bool(true)).labelled("true"),
120-
just("false").to(NorgMeta::Bool(false)).labelled("false"),
121128
number.map(NorgMeta::Num),
122129
key.then_ignore(just('\n')).map(NorgMeta::EmptyKey),
130+
empty_array,
123131
array,
124132
object,
125-
string.map(NorgMeta::Str),
133+
string,
126134
))
127135
.recover_with(nested_delimiters('{', '}', [('[', ']')], |_| {
128136
NorgMeta::Invalid

test.txt

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,9 @@
1-
key: value
2-
obj: {
3-
x: y
4-
a: [
5-
b: c
6-
]
1+
x: {
2+
3+
v: hi
4+
5+
x:
6+
hi: there
77
}
8-
arr: [
9-
x
10-
{
11-
k: v
12-
}
13-
]
14-
h: i
15-
a: 1
16-
b: 7
17-
x: 2024-10-15:1000:15:10.000
18-
y:
19-
z:
8+
a: []
9+
hi: there

0 commit comments

Comments
 (0)