All files / languages language-client-registry.ts

100% Statements 11/11
100% Branches 2/2
100% Functions 3/3
100% Lines 11/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40                  2x   4x     3x       1x       4x   4x 2x     2x 2x         1x   1x      
import { ILanguageClient } from './language-client-factory';
 
export interface ILanguageClientRegistry {
	register(languageId: string, client: ILanguageClient): void;
	unregister(languageId: string): void;
	requestContextRefresh(languageId: string, uri: string): Promise<boolean>;
}
 
export class LanguageClientRegistry implements ILanguageClientRegistry {
	private static readonly _refreshContextRequest = 'mentor.request.refreshDocument';
 
	private readonly _clientsByLanguageId = new Map<string, ILanguageClient>();
 
	register(languageId: string, client: ILanguageClient): void {
		this._clientsByLanguageId.set(languageId, client);
	}
 
	unregister(languageId: string): void {
		this._clientsByLanguageId.delete(languageId);
	}
 
	async requestContextRefresh(languageId: string, uri: string): Promise<boolean> {
		const languageClient = this._clientsByLanguageId.get(languageId);
 
		if (!languageClient?.sendRequest) {
			return false;
		}
 
		try {
			const result = await languageClient.sendRequest<boolean>(
				LanguageClientRegistry._refreshContextRequest,
				{ uri }
			);
 
			return result !== false;
		} catch {
			return false;
		}
	}
}