From cb7ba3f90513def8f8e0968fef44ac7334a2513e Mon Sep 17 00:00:00 2001 From: Dominik Jain Date: Fri, 3 Jul 2026 14:32:58 +0200 Subject: [PATCH] SolidLSP: Apply InitializeParamsBuilder to Angular/Svelte/Vue main servers The AngularLanguageServer, SvelteLanguageServer and VueLanguageServer classes (the primary ngserver/svelte-language-server/vue-language-server processes, all direct SolidLanguageServer subclasses) still hand-rolled their initialize params via _get_initialize_params, bypassing the builder. Only their companion *TypeScript* server classes (AngularTypeScriptServer, etc.) had been migrated previously. Convert the three main classes to _create_base_initialize_params so their processId/rootPath/rootUri/clientInfo/workspaceFolders are now supplied centrally by the InitializeParamsBuilder, consistent with every other language server. Server-specific initializationOptions (ngProbeLocations, svelte plugin configuration, Vue hybridMode) are preserved. Also update the Angular companion-cleanup test to monkeypatch the renamed _create_base_initialize_params (it patched the now-removed _get_initialize_params). Co-Authored-By: Claude Opus 4.8 (1M context) --- .../angular_language_server.py | 18 ++++-------------- .../language_servers/svelte_language_server.py | 18 +++--------------- .../language_servers/vue_language_server.py | 18 ++++-------------- .../angular/test_angular_error_cases.py | 6 +++--- 4 files changed, 14 insertions(+), 46 deletions(-) diff --git a/src/solidlsp/language_servers/angular_language_server.py b/src/solidlsp/language_servers/angular_language_server.py index 5edd1dca..e7bf231d 100644 --- a/src/solidlsp/language_servers/angular_language_server.py +++ b/src/solidlsp/language_servers/angular_language_server.py @@ -70,7 +70,7 @@ from solidlsp.language_servers.typescript_language_server import ( from solidlsp.language_servers.vscode_html_language_server import VsCodeHtmlLanguageServer from solidlsp.ls import LanguageServerDependencyProvider, LSPFileBuffer, SolidLanguageServer from solidlsp.ls_config import FilenameMatcher, Language, LanguageServerConfig -from solidlsp.lsp_protocol_handler.lsp_types import DocumentSymbol, InitializeParams, SymbolInformation +from solidlsp.lsp_protocol_handler.lsp_types import DocumentSymbol, SymbolInformation from solidlsp.lsp_protocol_handler.server import ProcessLaunchInfo from solidlsp.settings import SolidLSPSettings @@ -502,8 +502,7 @@ class AngularLanguageServer(SolidLanguageServer): else: log.debug("Found @angular/core at %s", found) - def _get_initialize_params(self, repository_absolute_path: str) -> InitializeParams: - root_uri = pathlib.Path(repository_absolute_path).as_uri() + def _create_base_initialize_params(self) -> dict: params: dict = { "locale": "en", "capabilities": { @@ -531,17 +530,8 @@ class AngularLanguageServer(SolidLanguageServer): "tsProbeLocations": [os.path.join(self._install_dir, "node_modules")], "forceStrictTemplates": False, }, - "processId": os.getpid(), - "rootPath": repository_absolute_path, - "rootUri": root_uri, - "workspaceFolders": [ - { - "uri": root_uri, - "name": os.path.basename(repository_absolute_path), - } - ], } - return params # type: ignore[return-value] + return params @override def _start_server(self) -> None: @@ -580,7 +570,7 @@ class AngularLanguageServer(SolidLanguageServer): try: log.info("Starting Angular language server (ngserver)") self.server.start() - init_params = self._get_initialize_params(self.repository_root_path) + init_params = self._create_initialize_params() init_response = self.server.send.initialize(init_params) log.debug("Angular LS initialize response: %s", init_response) self.server.notify.initialized({}) diff --git a/src/solidlsp/language_servers/svelte_language_server.py b/src/solidlsp/language_servers/svelte_language_server.py index 8b65c822..3c7f377b 100644 --- a/src/solidlsp/language_servers/svelte_language_server.py +++ b/src/solidlsp/language_servers/svelte_language_server.py @@ -28,7 +28,6 @@ from solidlsp.ls import ( SolidLanguageServer, ) from solidlsp.ls_config import FilenameMatcher, Language, LanguageServerConfig -from solidlsp.lsp_protocol_handler.lsp_types import InitializeParams from solidlsp.settings import SolidLSPSettings log = logging.getLogger(__name__) @@ -440,7 +439,7 @@ class SvelteLanguageServer(SolidLanguageServer): self.server.notify.send_notification = send_notification_wrapped - def _get_initialize_params(self) -> InitializeParams: + def _create_base_initialize_params(self) -> dict: """ Returns the initialize params for the Svelte Language Server. @@ -451,8 +450,6 @@ class SvelteLanguageServer(SolidLanguageServer): The resulting dict is also stored as :attr:`_lsp_configuration` so ``workspace/configuration`` requests can be answered with real values. """ - root_uri = pathlib.Path(self.repo_path).as_uri() - # base configuration mirroring all plugin-sections from svelte-vscode initializationOptions lsp_config: dict[str, Any] = { "svelte": {}, @@ -514,17 +511,8 @@ class SvelteLanguageServer(SolidLanguageServer): "dontFilterIncompleteCompletions": True, "configuration": lsp_config, }, - "processId": os.getpid(), - "rootPath": self.repo_path, - "rootUri": root_uri, - "workspaceFolders": [ - { - "uri": root_uri, - "name": os.path.basename(self.repo_path), - } - ], } - return cast(InitializeParams, initialize_params) + return initialize_params def _start_server(self) -> None: def window_log_message(msg: dict) -> None: @@ -562,7 +550,7 @@ class SvelteLanguageServer(SolidLanguageServer): self._wrap_notify_send_for_ts_js_mirror() self.server.start() - init_params = self._get_initialize_params() + init_params = self._create_initialize_params() init_response = self.server.send.initialize(init_params) assert "documentSymbolProvider" in init_response["capabilities"], "Svelte LSP did not advertise documentSymbolProvider" diff --git a/src/solidlsp/language_servers/vue_language_server.py b/src/solidlsp/language_servers/vue_language_server.py index a29ab7f5..b4d79297 100644 --- a/src/solidlsp/language_servers/vue_language_server.py +++ b/src/solidlsp/language_servers/vue_language_server.py @@ -27,7 +27,7 @@ from solidlsp.ls_exceptions import SolidLSPException from solidlsp.ls_types import Location from solidlsp.ls_utils import PathUtils from solidlsp.lsp_protocol_handler import lsp_types -from solidlsp.lsp_protocol_handler.lsp_types import DocumentSymbol, ExecuteCommandParams, InitializeParams, SymbolInformation +from solidlsp.lsp_protocol_handler.lsp_types import DocumentSymbol, ExecuteCommandParams, SymbolInformation from solidlsp.lsp_protocol_handler.server import ProcessLaunchInfo from solidlsp.settings import SolidLSPSettings @@ -617,8 +617,7 @@ class VueLanguageServer(SolidLanguageServer): return [vue_executable_path, "--stdio"], tsdk_path, ts_ls_executable_path - def _get_initialize_params(self, repository_absolute_path: str) -> InitializeParams: - root_uri = pathlib.Path(repository_absolute_path).as_uri() + def _create_base_initialize_params(self) -> dict: initialize_params = { "locale": "en", "capabilities": { @@ -644,15 +643,6 @@ class VueLanguageServer(SolidLanguageServer): "symbol": {"dynamicRegistration": True}, }, }, - "processId": os.getpid(), - "rootPath": repository_absolute_path, - "rootUri": root_uri, - "workspaceFolders": [ - { - "uri": root_uri, - "name": os.path.basename(repository_absolute_path), - } - ], "initializationOptions": { "vue": { "hybridMode": True, @@ -662,7 +652,7 @@ class VueLanguageServer(SolidLanguageServer): }, }, } - return initialize_params # type: ignore + return initialize_params def _start_typescript_server(self) -> None: try: @@ -811,7 +801,7 @@ class VueLanguageServer(SolidLanguageServer): log.info("Starting Vue server process") self.server.start() - initialize_params = self._get_initialize_params(self.repository_root_path) + initialize_params = self._create_initialize_params() log.info("Sending initialize request from LSP client to LSP server and awaiting response") init_response = self.server.send.initialize(initialize_params) diff --git a/test/solidlsp/angular/test_angular_error_cases.py b/test/solidlsp/angular/test_angular_error_cases.py index f65e7d09..85e9375e 100644 --- a/test/solidlsp/angular/test_angular_error_cases.py +++ b/test/solidlsp/angular/test_angular_error_cases.py @@ -335,10 +335,10 @@ class TestAngularStartupCleanup: def boom(*_args: object, **_kwargs: object) -> dict: raise RuntimeError("simulated ngserver init failure") - # _get_initialize_params runs after both companions and ngserver have - # been spawned — exactly the failure window the cleanup wrapper + # _create_base_initialize_params runs after both companions and ngserver + # have been spawned — exactly the failure window the cleanup wrapper # protects against. - monkeypatch.setattr(ls, "_get_initialize_params", boom) + monkeypatch.setattr(ls, "_create_base_initialize_params", boom) try: with pytest.raises(RuntimeError, match="simulated ngserver init"):