From 8664d54389d2a71c18780e3cefdd1f833dcb3182 Mon Sep 17 00:00:00 2001 From: AryanRG Date: Sat, 17 Oct 2026 10:51:33 +0530 Subject: [PATCH] fix: apply empty notebook metadata updates --- pygls/workspace/workspace.py | 2 +- tests/test_workspace.py | 37 ++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/pygls/workspace/workspace.py b/pygls/workspace/workspace.py index 4f161200..ecb33ee4 100644 --- a/pygls/workspace/workspace.py +++ b/pygls/workspace/workspace.py @@ -228,7 +228,7 @@ def update_notebook_document(self, params: types.DidChangeNotebookDocumentParams notebook = self._notebook_documents[unquote(uri)] notebook.version = params.notebook_document.version - if params.change.metadata: + if params.change.metadata is not None: notebook.metadata = params.change.metadata cell_changes = params.change.cells diff --git a/tests/test_workspace.py b/tests/test_workspace.py index 54d44359..b54fa2f2 100644 --- a/tests/test_workspace.py +++ b/tests/test_workspace.py @@ -219,6 +219,43 @@ def test_update_notebook_metadata(workspace): assert notebook.metadata == {"custom": "metadata"} +@pytest.mark.parametrize( + "metadata,expected", + [ + ({}, {}), + (None, {"custom": "metadata"}), + ({"replacement": True}, {"replacement": True}), + ], +) +def test_replace_notebook_metadata(workspace, metadata, expected): + """An empty metadata object clears old values; omission preserves them.""" + notebook = types.NotebookDocument( + uri=NOTEBOOK.uri, + notebook_type=NOTEBOOK.notebook_type, + version=0, + cells=[], + metadata={"custom": "metadata"}, + ) + workspace.put_notebook_document( + types.DidOpenNotebookDocumentParams( + notebook_document=notebook, cell_text_documents=[] + ) + ) + + workspace.update_notebook_document( + types.DidChangeNotebookDocumentParams( + notebook_document=types.VersionedNotebookDocumentIdentifier( + uri=notebook.uri, version=1 + ), + change=types.NotebookDocumentChangeEvent(metadata=metadata), + ) + ) + + updated = workspace.get_notebook_document(notebook_uri=notebook.uri) + assert updated.version == 1 + assert updated.metadata == expected + + def test_update_notebook_cell_data(workspace): """Ensure we can update a notebook correctly when cell data changes.""" params = types.DidOpenNotebookDocumentParams(