From 65cc802e11f3e17c1fa890311538780c7cbd2801 Mon Sep 17 00:00:00 2001 From: Neal Lin <21194575+Neallin-917@users.noreply.github.com> Date: Sun, 9 Aug 2026 18:02:30 +0800 Subject: [PATCH] fix: close add_line arrays on a new line --- tests/test_items.py | 13 +++++++++++++ tomlkit/items.py | 11 +++++++++++ 2 files changed, 24 insertions(+) diff --git a/tests/test_items.py b/tests/test_items.py index e331cae..ab80b66 100644 --- a/tests/test_items.py +++ b/tests/test_items.py @@ -529,6 +529,19 @@ def test_array_add_line() -> None: ) +def test_array_add_line_closes_the_last_line() -> None: + t = api.array() + t.add_line("foo", comment="bar") + + assert ( + t.as_string() + == """[ + \"foo\", # bar +]""" + ) + assert parse(f"array = {t.as_string()}").unwrap() == {"array": ["foo"]} + + def test_array_add_line_multiline_comment_is_rejected() -> None: t = api.array() with pytest.raises(ValueError, match="line breaks"): diff --git a/tomlkit/items.py b/tomlkit/items.py index 31369b0..10397ec 100644 --- a/tomlkit/items.py +++ b/tomlkit/items.py @@ -1547,6 +1547,15 @@ def add_line( new_values.append( Comment(Trivia(indent=indent, comment=f"# {comment}", trail="")) ) + + if ( + self._value + and self._value[-1].is_whitespace() + and self._value[-1].indent is not None + and self._value[-1].indent.s == "\n" + ): + self._value.pop() + list.extend(self, data_values) if len(self._value) > 0: last_item = self._value[-1] @@ -1566,6 +1575,8 @@ def add_line( self._value.extend(self._group_values(new_values)) else: self._value.extend(self._group_values(new_values)) + if newline and (items or comment): + self._value.extend(self._group_values([Whitespace("\n")])) self._reindex() def clear(self) -> None: