From 139a9d35dbc3e9b935fc0bc119ca83b19fa2e45f Mon Sep 17 00:00:00 2001 From: Vincent Gao Date: Mon, 22 Jun 2026 11:25:47 +0200 Subject: [PATCH] Preserve table display names on self assignment --- tests/test_toml_document.py | 14 ++++++++++++++ tomlkit/container.py | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/test_toml_document.py b/tests/test_toml_document.py index 1cdfb9c5..7e6bfa1a 100644 --- a/tests/test_toml_document.py +++ b/tests/test_toml_document.py @@ -965,6 +965,20 @@ def test_replace_preserve_sep() -> None: ) +def test_replace_table_with_itself_preserves_display_name() -> None: + content = """\ +[keys.a] +[keys .'a'.'c'] + 'd'\t= 'e' +""" + doc = parse(content) + + for mode in doc["keys"]: + doc["keys"][mode] = doc["keys"][mode] + + assert doc.as_string() == content + + def test_replace_with_table_of_nested() -> None: example = """\ [a] diff --git a/tomlkit/container.py b/tomlkit/container.py index 75e09018..5c579a68 100644 --- a/tomlkit/container.py +++ b/tomlkit/container.py @@ -862,7 +862,7 @@ def _replace_at( value.trivia.trail = v.trivia.trail self._body[idx] = (new_key, value) - if hasattr(value, "invalidate_display_name"): + if value is not v and hasattr(value, "invalidate_display_name"): value.invalidate_display_name() if isinstance(value, Table):