Skip to content

Commit e61ad55

Browse files
authored
Support TOML 1.1 (#20)
1 parent 5748812 commit e61ad55

17 files changed

+322
-7
lines changed

integ-tests/tests/parser.rs

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,10 +140,9 @@ invalid!(eof, "key =");
140140
mod bad_inline_tables {
141141
use super::invalid;
142142

143-
invalid!(trailing_comma, "a = {a=1,}");
143+
// TOML 1.1: trailing_comma and newline are now valid, so removed from invalid tests
144144
invalid!(only_comma, "a = {,}");
145145
invalid!(duplicate_key, "a = {a=1,a=1}");
146-
invalid!(newline, "a = {\n}");
147146
invalid!(eof, "a = {");
148147
}
149148

@@ -307,3 +306,58 @@ mod require_newlines {
307306
invalid!(basic2, "0=0r0=0r=false");
308307
invalid!(basic3, "0=0r0=0r=falsefal=false");
309308
}
309+
310+
// TOML 1.1 features
311+
mod toml_1_1 {
312+
use super::valid;
313+
314+
// Inline tables can now have newlines
315+
valid!(
316+
inline_table_newlines,
317+
r#"
318+
tbl = {
319+
key = "value",
320+
nested = {
321+
inner = 42,
322+
},
323+
}
324+
"#
325+
);
326+
327+
// Trailing commas in inline tables
328+
valid!(inline_table_trailing_comma, "a = {a=1,}");
329+
330+
// Empty inline table with newlines
331+
valid!(inline_table_empty_newlines, "a = {\n}");
332+
333+
// \e escape sequence (escape character U+001B)
334+
valid!(escape_e, r#"csi = "\e[""#);
335+
336+
// \xHH escape sequence for codepoints < 255
337+
valid!(
338+
escape_x,
339+
r#"
340+
null = "\x00"
341+
letter = "\x61"
342+
"#
343+
);
344+
345+
// Combined escape sequences
346+
valid!(
347+
escape_combined,
348+
r#"test = "\x00\x1b\e\x61\u0041\U00000042""#
349+
);
350+
351+
// Complex inline table with comments
352+
valid!(
353+
inline_table_with_comments,
354+
r#"
355+
tbl = {
356+
# This is a comment
357+
key = "value",
358+
# Another comment
359+
num = 123,
360+
}
361+
"#
362+
);
363+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
source: integ-tests/tests/parser.rs
3+
expression: spans
4+
---
5+
note[string]: root_test
6+
┌─ escape_combined:1:9
7+
8+
1test = "\x00\x1b\e\x61\u0041\U00000042"
9+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
10+
11+
note[table]: root
12+
┌─ escape_combined:1:1
13+
14+
1test = "\x00\x1b\e\x61\u0041\U00000042"
15+
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
source: integ-tests/tests/parser.rs
3+
expression: valid_toml
4+
---
5+
{
6+
"test": "\u0000\u001b\u001baAB"
7+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
---
2+
source: integ-tests/tests/parser.rs
3+
expression: spans
4+
---
5+
note[string]: root_csi
6+
┌─ escape_e:1:8
7+
8+
1csi = "\e["
9+
^^^
10+
11+
note[table]: root
12+
┌─ escape_e:1:1
13+
14+
1csi = "\e["
15+
^^^^^^^^^^^
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
source: integ-tests/tests/parser.rs
3+
expression: valid_toml
4+
---
5+
{
6+
"csi": "\u001b["
7+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
source: integ-tests/tests/parser.rs
3+
expression: spans
4+
---
5+
note[string]: root_letter
6+
┌─ escape_x:3:11
7+
8+
3letter = "\x61"
9+
^^^^
10+
11+
note[string]: root_null
12+
┌─ escape_x:2:9
13+
14+
2null = "\x00"
15+
^^^^
16+
17+
note[table]: root
18+
┌─ escape_x:1:1
19+
20+
1 │ ╭
21+
2 │ │ null = "\x00"
22+
3 │ │ letter = "\x61"
23+
4 │ │
24+
│ ╰^
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
source: integ-tests/tests/parser.rs
3+
expression: valid_toml
4+
---
5+
{
6+
"letter": "a",
7+
"null": "\u0000"
8+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
---
2+
source: integ-tests/tests/parser.rs
3+
expression: spans
4+
---
5+
note[table]: root_a
6+
┌─ inline_table_empty_newlines:1:5
7+
8+
1a = {
9+
│ ╭─────^
10+
2 │ │ }
11+
│ ╰─^
12+
13+
note[table]: root
14+
┌─ inline_table_empty_newlines:1:1
15+
16+
1 │ ╭ a = {
17+
2 │ │ }
18+
│ ╰─^
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
source: integ-tests/tests/parser.rs
3+
expression: valid_toml
4+
---
5+
{
6+
"a": {}
7+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
---
2+
source: integ-tests/tests/parser.rs
3+
expression: spans
4+
---
5+
note[string]: root_tbl_key
6+
┌─ inline_table_newlines:3:12
7+
8+
3key = "value",
9+
^^^^^
10+
11+
note[integer]: root_tbl_nested_inner
12+
┌─ inline_table_newlines:5:17
13+
14+
5inner = 42,
15+
^^
16+
17+
note[table]: root_tbl_nested
18+
┌─ inline_table_newlines:4:14
19+
20+
4nested = {
21+
│ ╭──────────────^
22+
5 │ │ inner = 42,
23+
6 │ │ },
24+
│ ╰─────^
25+
26+
note[table]: root_tbl
27+
┌─ inline_table_newlines:2:7
28+
29+
2tbl = {
30+
│ ╭───────^
31+
3 │ │ key = "value",
32+
4 │ │ nested = {
33+
5 │ │ inner = 42,
34+
6 │ │ },
35+
7 │ │ }
36+
│ ╰─^
37+
38+
note[table]: root
39+
┌─ inline_table_newlines:1:1
40+
41+
1 │ ╭
42+
2 │ │ tbl = {
43+
3 │ │ key = "value",
44+
4 │ │ nested = {
45+
· │
46+
7 │ │ }
47+
8 │ │
48+
│ ╰^

0 commit comments

Comments
 (0)