From e03094f5bc5e8b2c2f082843f777c4418db394f6 Mon Sep 17 00:00:00 2001 From: Tyce Herrman Date: Tue, 4 Aug 2026 12:59:38 -0400 Subject: [PATCH] fix(nix): use published diagnostics for nixd --- CHANGELOG.md | 2 ++ src/solidlsp/language_servers/nixd_ls.py | 6 ++++++ test/solidlsp/nix/test_nix_basic.py | 1 + 3 files changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa0b869b..0a737025 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,8 @@ Status of the `main` branch. Changes prior to the next official version change w project creation) - Add `python_basedpyright` as an alternative Python language server - Nix/nixd: support custom `ls_path` launchers and external JSON settings through `config_path` #1737 + - Fix: Nix/nixd diagnostics now use published diagnostics instead of the unsupported + `textDocument/diagnostic` request, which terminated nixd #1802 - Fix: `get_diagnostics_for_file` crashed with `SolidLSPException` for any Ansible file with at least one lint finding, because `ansible-language-server` doesn't implement `textDocument/documentSymbol` and the request used to map diagnostics onto owning symbols just threw. `AnsibleLanguageServer` now diff --git a/src/solidlsp/language_servers/nixd_ls.py b/src/solidlsp/language_servers/nixd_ls.py index 430cf46a..00ab995e 100644 --- a/src/solidlsp/language_servers/nixd_ls.py +++ b/src/solidlsp/language_servers/nixd_ls.py @@ -378,6 +378,12 @@ class NixLanguageServer(SolidLanguageServer): } return initialize_params + @override + def _supports_pull_diagnostics(self) -> bool: + # nixd publishes diagnostics after textDocument/didOpen but terminates when it receives + # textDocument/diagnostic. Force the published-diagnostics path instead. + return False + def _start_server(self): """Start nixd server process""" initialize_params = self._create_initialize_params() diff --git a/test/solidlsp/nix/test_nix_basic.py b/test/solidlsp/nix/test_nix_basic.py index 003a0e71..281aee53 100644 --- a/test/solidlsp/nix/test_nix_basic.py +++ b/test/solidlsp/nix/test_nix_basic.py @@ -259,3 +259,4 @@ class TestNixLanguageServer: (), min_count=1, ) + assert language_server.is_running()