All files / languages/xml xml-token-provider.ts

100% Statements 11/11
100% Branches 0/0
100% Functions 2/2
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 41 42 43 44 45 46 47                                              4x 4x 4x 4x   4x 4x 4x 4x     4x 4x       5x              
import * as vscode from 'vscode';
import { container } from 'tsyringe';
import { VocabularyRepository } from '@faubulous/mentor-rdf';
import { ServiceToken } from '@src/services/tokens';
import { IDocumentContextService } from '@src/services/document';
import { IWorkspaceIndexerService, IWorkspaceRenameService } from '@src/services/core';
import { ResourceReferenceProvider, NotebookCellSlugCodeLensProvider } from '@src/providers';
import { TurtleUsageCodeLensProvider } from '@src/languages/turtle/providers';
import { XmlRenameProvider } from '@src/languages/xml/providers';
 
/**
 * Registers the language feature providers for the RDF/XML language.
 *
 * This is a composition point: services are resolved from the container once
 * and passed into the provider constructors.
 */
export class XmlTokenProvider {
	private readonly _codelensProvider: TurtleUsageCodeLensProvider;
	private readonly _notebookSlugCodelensProvider: NotebookCellSlugCodeLensProvider;
	private readonly _referenceProvider: ResourceReferenceProvider;
	private readonly _renameProvider: XmlRenameProvider;
 
	constructor() {
		const contextService = container.resolve<IDocumentContextService>(ServiceToken.DocumentContextService);
		const vocabulary = container.resolve<VocabularyRepository>(ServiceToken.VocabularyRepository);
		const workspaceIndexer = container.resolve<IWorkspaceIndexerService>(ServiceToken.WorkspaceIndexerService);
		const renameService = container.resolve<IWorkspaceRenameService>(ServiceToken.WorkspaceRenameService);
 
		this._codelensProvider = new TurtleUsageCodeLensProvider(contextService, workspaceIndexer, vocabulary);
		this._notebookSlugCodelensProvider = new NotebookCellSlugCodeLensProvider(contextService);
		this._referenceProvider = new ResourceReferenceProvider(contextService);
		this._renameProvider = new XmlRenameProvider(contextService, renameService);
 
		// Self-register with the extension context for automatic disposal
		const context = container.resolve<vscode.ExtensionContext>(ServiceToken.ExtensionContext);
		context.subscriptions.push(...this.registerForLanguage('xml'));
	}
 
	protected registerForLanguage(language: string): vscode.Disposable[] {
		return [
			vscode.languages.registerCodeLensProvider({ language }, this._codelensProvider),
			vscode.languages.registerReferenceProvider({ language }, this._referenceProvider),
			vscode.languages.registerRenameProvider({ language }, this._renameProvider),
			vscode.languages.registerCodeLensProvider({ language }, this._notebookSlugCodelensProvider),
		];
	}
}