Skip to content

Commit 2342380

Browse files
committed
tomllib: Allow newlines and trailing comma in inline tables (TOML 1.1)
1 parent f8275d4 commit 2342380

5 files changed

Lines changed: 53 additions & 4 deletions

File tree

Lib/test/test_tomllib/data/valid/empty-inline-table.json renamed to Lib/test/test_tomllib/data/valid/inline-table/empty-inline-table.json

File renamed without changes.

Lib/test/test_tomllib/data/valid/empty-inline-table.toml renamed to Lib/test/test_tomllib/data/valid/inline-table/empty-inline-table.toml

File renamed without changes.
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"multiline": {
3+
"a": {
4+
"type": "integer",
5+
"value": "1"
6+
},
7+
"b": {
8+
"type": "integer",
9+
"value": "2"
10+
},
11+
"c": [
12+
{
13+
"type": "integer",
14+
"value": "1"
15+
},
16+
{
17+
"type": "integer",
18+
"value": "2"
19+
},
20+
{
21+
"type": "integer",
22+
"value": "3"
23+
}
24+
],
25+
"d": {
26+
"type": "integer",
27+
"value": "3"
28+
},
29+
"e": {
30+
"type": "integer",
31+
"value": "4"
32+
},
33+
"f": {}
34+
}
35+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
multiline = {
2+
"a" = 1, "b" = 2,
3+
c = [
4+
1,
5+
2,
6+
3,
7+
],# comment
8+
d = 3,
9+
e = 4, f = {
10+
# comment
11+
},
12+
}

Lib/tomllib/_parser.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ def parse_inline_table(src: str, pos: Pos, parse_float: ParseFloat) -> tuple[Pos
516516
nested_dict = NestedDict()
517517
flags = Flags()
518518

519-
pos = skip_chars(src, pos, TOML_WS)
519+
pos = skip_comments_and_array_ws(src, pos)
520520
if src.startswith("}", pos):
521521
return pos + 1, nested_dict.dict
522522
while True:
@@ -531,16 +531,18 @@ def parse_inline_table(src: str, pos: Pos, parse_float: ParseFloat) -> tuple[Pos
531531
if key_stem in nest:
532532
raise TOMLDecodeError(f"Duplicate inline table key {key_stem!r}", src, pos)
533533
nest[key_stem] = value
534-
pos = skip_chars(src, pos, TOML_WS)
534+
pos = skip_comments_and_array_ws(src, pos)
535535
c = src[pos : pos + 1]
536536
if c == "}":
537537
return pos + 1, nested_dict.dict
538538
if c != ",":
539539
raise TOMLDecodeError("Unclosed inline table", src, pos)
540+
pos += 1
541+
pos = skip_comments_and_array_ws(src, pos)
542+
if src.startswith("}", pos):
543+
return pos + 1, nested_dict.dict
540544
if isinstance(value, (dict, list)):
541545
flags.set(key, Flags.FROZEN, recursive=True)
542-
pos += 1
543-
pos = skip_chars(src, pos, TOML_WS)
544546

545547

546548
def parse_basic_str_escape(

0 commit comments

Comments
 (0)