From 24b44cdcae83b1010eb8d07cf4083efb2827057b Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Tue, 4 Aug 2026 20:29:26 +0530 Subject: [PATCH 1/2] fix(lsp): send workspace folders during initialization Pass the resolved workspace root through initialize.workspaceFolders so language servers such as ty can discover project configuration and Python virtual environments. --- src/cm/lsp/clientManager.ts | 40 +++++++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/src/cm/lsp/clientManager.ts b/src/cm/lsp/clientManager.ts index fce8e1950..74b14384f 100644 --- a/src/cm/lsp/clientManager.ts +++ b/src/cm/lsp/clientManager.ts @@ -178,8 +178,11 @@ function connectClient( client: ExtendedLSPClient, transport: Transport, initializationOptions?: Record, + rootUri?: string | null, ): void { - if (!initializationOptions || !Object.keys(initializationOptions).length) { + const hasInitializationOptions = + !!initializationOptions && Object.keys(initializationOptions).length > 0; + if (!hasInitializationOptions && !rootUri) { client.connect(transport); return; } @@ -199,7 +202,14 @@ function connectClient( if (method === "initialize" && isPlainObject(params)) { params = { ...params, - initializationOptions, + ...(hasInitializationOptions ? { initializationOptions } : {}), + ...(rootUri + ? { + workspaceFolders: [ + { uri: rootUri, name: workspaceName(rootUri) }, + ], + } + : {}), } as Params; } return originalRequestInner(method, params, mapped); @@ -212,6 +222,16 @@ function connectClient( } } +function workspaceName(rootUri: string): string { + const trimmed = rootUri.replace(/\/+$/, ""); + const encodedName = trimmed.slice(trimmed.lastIndexOf("/") + 1); + try { + return decodeURIComponent(encodedName) || "workspace"; + } catch { + return encodedName || "workspace"; + } +} + interface BuiltinExtensionsResult { extensions: Extension[]; diagnosticsExtension: Extension | LSPClientExtension | null; @@ -764,6 +784,7 @@ export class LspClientManager { }, workspace: { configuration: true, + workspaceFolders: true, }, }, }; @@ -1010,7 +1031,12 @@ export class LspClientManager { await waitForInitialization(transportHandle.ready, signal, server.id); client = new LSPClient(clientConfig) as ExtendedLSPClient; client.__acodeServerId = server.id; - connectClient(client, transportHandle.transport, initializationOptions); + connectClient( + client, + transportHandle.transport, + initializationOptions, + server.useWorkspaceFolders ? null : normalizedRootUri, + ); await waitForInitialization(client.initializing, signal, server.id); if (!client.__acodeLoggedInfo) { // Log root URI info to console @@ -1032,7 +1058,13 @@ export class LspClientManager { ); } logLspInfo(`[LSP:${server.id}] initialized`); - addLspLog(server.id, "info", "Initialized"); + addLspLog( + server.id, + "info", + normalizedRootUri + ? `Initialized workspace ${normalizedRootUri}` + : "Initialized without a workspace root", + ); client.__acodeLoggedInfo = true; } } catch (error) { From 3f271561714bb0cd36d8088282a514a790390925 Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Tue, 4 Aug 2026 20:38:10 +0530 Subject: [PATCH 2/2] fix --- src/cm/lsp/clientManager.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cm/lsp/clientManager.ts b/src/cm/lsp/clientManager.ts index 74b14384f..94ecd40cf 100644 --- a/src/cm/lsp/clientManager.ts +++ b/src/cm/lsp/clientManager.ts @@ -1035,7 +1035,9 @@ export class LspClientManager { client, transportHandle.transport, initializationOptions, - server.useWorkspaceFolders ? null : normalizedRootUri, + scope === "workspace" && server.useWorkspaceFolders + ? null + : normalizedRootUri, ); await waitForInitialization(client.initializing, signal, server.id); if (!client.__acodeLoggedInfo) {