| 16 | const localize: nls.LocalizeFunc = nls.loadMessageBundle(); |
| 17 | |
| 18 | export class CppTools implements CppToolsTestApi { |
| 19 | private version: Version; |
| 20 | private providers: CustomConfigurationProvider1[] = []; |
| 21 | private failedRegistrations: CustomConfigurationProvider[] = []; |
| 22 | private timers = new Map<string, NodeJS.Timeout>(); |
| 23 | |
| 24 | constructor(version: Version) { |
| 25 | if (version > Version.latest) { |
| 26 | console.warn(`version ${version} is not supported by this version of cpptools`); |
| 27 | console.warn(` using ${Version.latest} instead`); |
| 28 | version = Version.latest; |
| 29 | } |
| 30 | this.version = version; |
| 31 | } |
| 32 | |
| 33 | private addNotifyReadyTimer(provider: CustomConfigurationProvider1): void { |
| 34 | if (this.version >= Version.v2) { |
| 35 | const timeout: number = 30; |
| 36 | const timer: NodeJS.Timeout = global.setTimeout(() => { |
| 37 | console.warn(`registered provider ${provider.extensionId} did not call 'notifyReady' within ${timeout} seconds`); |
| 38 | }, timeout * 1000); |
| 39 | this.timers.set(provider.extensionId, timer); |
| 40 | } |
| 41 | } |
| 42 | |
| 43 | private removeNotifyReadyTimer(provider: CustomConfigurationProvider1): void { |
| 44 | if (this.version >= Version.v2) { |
| 45 | const timer: NodeJS.Timeout | undefined = this.timers.get(provider.extensionId); |
| 46 | if (timer) { |
| 47 | this.timers.delete(provider.extensionId); |
| 48 | clearTimeout(timer); |
| 49 | } |
| 50 | } |
| 51 | } |
| 52 | |
| 53 | public getVersion(): Version { |
| 54 | return this.version; |
| 55 | } |
| 56 | |
| 57 | public registerCustomConfigurationProvider(provider: CustomConfigurationProvider): void { |
| 58 | const providers: CustomConfigurationProviderCollection = getCustomConfigProviders(); |
| 59 | if (providers.add(provider, this.version)) { |
| 60 | const added: CustomConfigurationProvider1 | undefined = providers.get(provider); |
| 61 | if (added) { |
| 62 | getOutputChannelLogger().appendLineAtLevel(5, localize("provider.registered", "Custom configuration provider '{0}' registered", added.name)); |
| 63 | this.providers.push(added); |
| 64 | LanguageServer.getClients().forEach(client => void client.onRegisterCustomConfigurationProvider(added)); |
| 65 | this.addNotifyReadyTimer(added); |
| 66 | } |
| 67 | } else { |
| 68 | this.failedRegistrations.push(provider); |
| 69 | } |
| 70 | } |
| 71 | |
| 72 | public notifyReady(provider: CustomConfigurationProvider): void { |
| 73 | const providers: CustomConfigurationProviderCollection = getCustomConfigProviders(); |
| 74 | const p: CustomConfigurationProvider1 | undefined = providers.get(provider); |
| 75 |
nothing calls this directly
no outgoing calls
no test coverage detected