Skip to content

Commit edb810a

Browse files
authored
Pass multiple URI's to provideConfigurations (#10469)
1 parent 42b3c28 commit edb810a

File tree

1 file changed

+52
-42
lines changed

1 file changed

+52
-42
lines changed

Extension/src/LanguageServer/client.ts

Lines changed: 52 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1804,57 +1804,67 @@ export class DefaultClient implements Client {
18041804
// Need to loop through candidates, to see if we can get a custom configuration from any of them.
18051805
// Wrap all lookups in a single task, so we can apply a timeout to the entire duration.
18061806
const provideConfigurationAsync: () => Thenable<SourceFileConfigurationItem[] | null | undefined> = async () => {
1807+
const uris: vscode.Uri[] = [];
18071808
for (let i: number = 0; i < response.candidates.length; ++i) {
1809+
const candidate: string = response.candidates[i];
1810+
const tuUri: vscode.Uri = vscode.Uri.parse(candidate);
18081811
try {
1809-
const candidate: string = response.candidates[i];
1810-
const tuUri: vscode.Uri = vscode.Uri.parse(candidate);
18111812
if (await provider.canProvideConfiguration(tuUri, tokenSource.token)) {
1812-
const configs: util.Mutable<SourceFileConfigurationItem>[] = await provider.provideConfigurations([tuUri], tokenSource.token);
1813-
if (configs && configs.length > 0 && configs[0]) {
1814-
const fileConfiguration: configs.Configuration | undefined = this.configuration.CurrentConfiguration;
1815-
if (fileConfiguration?.mergeConfigurations) {
1816-
configs.forEach(config => {
1817-
if (fileConfiguration.includePath) {
1818-
fileConfiguration.includePath.forEach(p => {
1819-
if (!config.configuration.includePath.includes(p)) {
1820-
config.configuration.includePath.push(p);
1821-
}
1822-
});
1823-
}
1813+
uris.push(tuUri);
1814+
}
1815+
} catch (err) {
1816+
console.warn("Caught exception from canProvideConfiguration");
1817+
}
1818+
}
1819+
if (!uris.length) {
1820+
return [];
1821+
}
1822+
let configs: util.Mutable<SourceFileConfigurationItem>[] = [];
1823+
try {
1824+
configs = await provider.provideConfigurations(uris, tokenSource.token);
1825+
} catch (err) {
1826+
console.warn("Caught exception from provideConfigurations");
1827+
}
18241828

1825-
if (fileConfiguration.defines) {
1826-
fileConfiguration.defines.forEach(d => {
1827-
if (!config.configuration.defines.includes(d)) {
1828-
config.configuration.defines.push(d);
1829-
}
1830-
});
1831-
}
1829+
if (configs && configs.length > 0 && configs[0]) {
1830+
const fileConfiguration: configs.Configuration | undefined = this.configuration.CurrentConfiguration;
1831+
if (fileConfiguration?.mergeConfigurations) {
1832+
configs.forEach(config => {
1833+
if (fileConfiguration.includePath) {
1834+
fileConfiguration.includePath.forEach(p => {
1835+
if (!config.configuration.includePath.includes(p)) {
1836+
config.configuration.includePath.push(p);
1837+
}
1838+
});
1839+
}
18321840

1833-
if (!config.configuration.forcedInclude) {
1834-
config.configuration.forcedInclude = [];
1835-
}
1841+
if (fileConfiguration.defines) {
1842+
fileConfiguration.defines.forEach(d => {
1843+
if (!config.configuration.defines.includes(d)) {
1844+
config.configuration.defines.push(d);
1845+
}
1846+
});
1847+
}
18361848

1837-
if (fileConfiguration.forcedInclude) {
1838-
fileConfiguration.forcedInclude.forEach(i => {
1839-
if (config.configuration.forcedInclude) {
1840-
if (!config.configuration.forcedInclude.includes(i)) {
1841-
config.configuration.forcedInclude.push(i);
1842-
}
1843-
}
1844-
});
1845-
}
1846-
});
1847-
}
1849+
if (!config.configuration.forcedInclude) {
1850+
config.configuration.forcedInclude = [];
1851+
}
18481852

1849-
return configs as SourceFileConfigurationItem[];
1853+
if (fileConfiguration.forcedInclude) {
1854+
fileConfiguration.forcedInclude.forEach(i => {
1855+
if (config.configuration.forcedInclude) {
1856+
if (!config.configuration.forcedInclude.includes(i)) {
1857+
config.configuration.forcedInclude.push(i);
1858+
}
1859+
}
1860+
});
18501861
}
1851-
}
1852-
if (tokenSource.token.isCancellationRequested) {
1853-
return null;
1854-
}
1855-
} catch (err) {
1856-
console.warn("Caught exception request configuration");
1862+
});
18571863
}
1864+
return configs as SourceFileConfigurationItem[];
1865+
}
1866+
if (tokenSource.token.isCancellationRequested) {
1867+
return null;
18581868
}
18591869
};
18601870
const configs: SourceFileConfigurationItem[] | null | undefined = await this.callTaskWithTimeout(provideConfigurationAsync, configProviderTimeout, tokenSource);

0 commit comments

Comments
 (0)