From 16f7632596372ce861fd67cf83238e04c5d504b8 Mon Sep 17 00:00:00 2001 From: Weverton Guedes Date: Thu, 30 Jul 2026 23:09:49 +0200 Subject: [PATCH] Don't discard custom configurations whose uri is a vscode.Uri --- Extension/src/LanguageServer/client.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Extension/src/LanguageServer/client.ts b/Extension/src/LanguageServer/client.ts index 80b4f5fde..ebfbb7b42 100644 --- a/Extension/src/LanguageServer/client.ts +++ b/Extension/src/LanguageServer/client.ts @@ -2328,6 +2328,21 @@ export class DefaultClient implements Client { if (configs && configs.length > 0 && configs[0]) { const fileConfiguration: configs.Configuration | undefined = this.configuration.CurrentConfiguration; if (fileConfiguration?.mergeConfigurations) { + // deepCopy is a JSON round trip, which a vscode.Uri does not survive. The copy is + // a plain object that is neither a string nor a Uri, so sendCustomConfigurations + // discards the item. The uri field also accepts a string, so normalize it into a + // new item before copying, without assigning into what the provider returned or + // calling a method on its array. + if (configs instanceof Array) { + const normalized: util.Mutable[] = []; + const count: number = configs.length; + for (let i: number = 0; i < count; ++i) { + const config: util.Mutable = configs[i]; + const uri = config?.uri; + normalized.push(util.isUri(uri) ? { uri: uri.toString(), configuration: config.configuration } : config); + } + configs = normalized; + } configs = deepCopy(configs); configs.forEach(config => { if (fileConfiguration.includePath) {