Skip to content

Commit ce0dcc6

Browse files
committed
fix: add missing newline after inline table in serialization
When an inline table without a trailing newline was followed by a new key-value pair, the serialization would concatenate them on the same line (e.g. 'a.b = {}c = 3' instead of 'a.b = {}\nc = 3'). This ensures a newline is inserted before rendering a simple item when the preceding content in a table doesn't end with one. Fixes #440
1 parent 0e67614 commit ce0dcc6

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

tests/test_toml_document.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1314,3 +1314,25 @@ def test_appending_to_super_table():
13141314
"""
13151315

13161316
assert doc.as_string() == expected
1317+
1318+
1319+
def test_missing_newline_after_inline_table_issue_440():
1320+
"""Regression test for https://github.com/python-poetry/tomlkit/issues/440"""
1321+
content = """[x]\na.b = {}"""
1322+
doc = parse(content)
1323+
doc["x"]["c"] = 3
1324+
expected = "[x]\na.b = {}\nc = 3\n"
1325+
assert doc.as_string() == expected
1326+
1327+
# With trailing newline should also work
1328+
content2 = """[x]\na.b = {}\n"""
1329+
doc2 = parse(content2)
1330+
doc2["x"]["c"] = 3
1331+
assert doc2.as_string() == expected
1332+
1333+
# Non-dotted key variant
1334+
content3 = """[x]\na = {}"""
1335+
doc3 = parse(content3)
1336+
doc3["x"]["c"] = 3
1337+
expected3 = "[x]\na = {}\nc = 3\n"
1338+
assert doc3.as_string() == expected3

tomlkit/container.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,8 @@ def _render_table(self, key: Key, table: Table, prefix: str | None = None) -> st
606606
cur += "\n"
607607
cur += self._render_aot(k, v, prefix=_key)
608608
else:
609+
if k is not None and cur and not cur.endswith("\n"):
610+
cur += "\n"
609611
cur += self._render_simple_item(
610612
k, v, prefix=_key if key.is_dotted() else None
611613
)

0 commit comments

Comments
 (0)