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

100% Statements 27/27
100% Branches 0/0
100% Functions 2/2
100% Lines 26/26

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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88                                                                                  6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x   6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x 6x     6x 6x                                    
import * as vscode from 'vscode';
import { container } from 'tsyringe';
import { VocabularyRepository } from '@faubulous/mentor-rdf';
import { ServiceToken } from '@src/services/tokens';
import { IDocumentContextService, IPrefixLookupService, IPresetDocumentService } from '@src/services/document';
import { IWorkspaceIndexerService, IWorkspaceRenameService } from '@src/services/core';
import {
	ISparqlConnectionRegistry,
	ISparqlQueryService,
	ITripleStoreConfigService,
	IGraphManagementService,
	IDocumentConnectionService
} from '@src/languages/sparql/services';
import {
	ResourceReferenceProvider,
	ResourceDefinitionProvider,
	WorkspaceGraphDefinitionProvider,
	NotebookCellSlugCodeLensProvider
} from '@src/providers';
import {
	TurtleAutoDefinePrefixProvider,
	TurtleCodeActionsProvider,
	TurtlePrefixCompletionProvider
} from '@src/languages/turtle/providers';
import {
	SparqlCodeLensProvider,
	SparqlCompletionItemProvider,
	SparqlCodeFormattingProvider,
	SparqlGraphDiagnosticProvider,
	SparqlRenameProvider
} from '@src/languages/sparql/providers';
import { SparqlPrefixDefinitionService } from '@src/languages/sparql/services/sparql-prefix-definition-service';
 
/**
 * Registers the language feature providers for the SPARQL language.
 *
 * This is a composition point: services are resolved from the container once
 * and passed into the provider constructors.
 */
export class SparqlTokenProvider {
	constructor() {
		const contextService = container.resolve<IDocumentContextService>(ServiceToken.DocumentContextService);
		const vocabulary = container.resolve<VocabularyRepository>(ServiceToken.VocabularyRepository);
		const prefixLookup = container.resolve<IPrefixLookupService>(ServiceToken.PrefixLookupService);
		const connectionRegistry = container.resolve<ISparqlConnectionRegistry>(ServiceToken.SparqlConnectionRegistry);
		const documentConnectionService = container.resolve<IDocumentConnectionService>(ServiceToken.DocumentConnectionService);
		const storeConfigService = container.resolve<ITripleStoreConfigService>(ServiceToken.StoreConfigService);
		const queryService = container.resolve<ISparqlQueryService>(ServiceToken.SparqlQueryService);
		const graphService = container.resolve<IGraphManagementService>(ServiceToken.GraphManagementService);
		const renameService = container.resolve<IWorkspaceRenameService>(ServiceToken.WorkspaceRenameService);
		const workspaceIndexer = container.resolve<IWorkspaceIndexerService>(ServiceToken.WorkspaceIndexerService);
		const presetDocuments = container.resolve<IPresetDocumentService>(ServiceToken.PresetDocumentService);
 
		const codeActionsProvider = new TurtleCodeActionsProvider(contextService);
		const codeLensProvider = new SparqlCodeLensProvider(connectionRegistry, documentConnectionService, storeConfigService, queryService);
		const notebookSlugCodelensProvider = new NotebookCellSlugCodeLensProvider(contextService);
		const completionProvider = new SparqlCompletionItemProvider(contextService, vocabulary, connectionRegistry, documentConnectionService, graphService);
		const definitionProvider = new ResourceDefinitionProvider(contextService, workspaceIndexer, presetDocuments);
		const workspaceGraphDefinitionProvider = new WorkspaceGraphDefinitionProvider(contextService);
		const formattingProvider = new SparqlCodeFormattingProvider();
		const prefixCompletionProvider = new TurtlePrefixCompletionProvider((uri) => ` <${uri}>`, contextService, prefixLookup);
		const referenceProvider = new ResourceReferenceProvider(contextService);
		const renameProvider = new SparqlRenameProvider(contextService, renameService);
		const prefixDefinitionService = container.resolve<SparqlPrefixDefinitionService>(ServiceToken.SparqlPrefixDefinitionService);
		const autoDefinePrefixProvider = new TurtleAutoDefinePrefixProvider(['sparql'], prefixDefinitionService, contextService);
		const graphDiagnosticProvider = new SparqlGraphDiagnosticProvider(documentConnectionService, graphService);
 
		// Self-register with the extension context for automatic disposal
		const context = container.resolve<vscode.ExtensionContext>(ServiceToken.ExtensionContext);
		context.subscriptions.push(
			autoDefinePrefixProvider,
			graphDiagnosticProvider,
			vscode.languages.registerCodeActionsProvider({ language: 'sparql' }, codeActionsProvider, {
				providedCodeActionKinds: TurtleCodeActionsProvider.providedCodeActionKinds
			}),
			vscode.languages.registerCodeLensProvider({ language: 'sparql' }, codeLensProvider),
			vscode.languages.registerCompletionItemProvider({ language: 'sparql' }, completionProvider, ...completionProvider.triggerCharacters),
			vscode.languages.registerDefinitionProvider({ language: 'sparql' }, definitionProvider),
			vscode.languages.registerDefinitionProvider({ language: 'sparql' }, workspaceGraphDefinitionProvider),
			vscode.languages.registerDocumentFormattingEditProvider({ language: 'sparql' }, formattingProvider),
			vscode.languages.registerInlineCompletionItemProvider({ language: 'sparql' }, prefixCompletionProvider),
			vscode.languages.registerReferenceProvider({ language: 'sparql' }, referenceProvider),
			vscode.languages.registerRenameProvider({ language: 'sparql' }, renameProvider),
			vscode.languages.registerCodeLensProvider({ language: 'sparql' }, notebookSlugCodelensProvider),
		);
	}
}