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

100% Statements 17/17
100% Branches 0/0
100% Functions 4/4
100% Lines 16/16

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                                    3x 3x 3x 3x 3x 3x 3x 3x 3x         9x   9x 9x   9x 27x                 13x       28x                        
import * as vscode from 'vscode';
import { container } from 'tsyringe';
import { ServiceToken } from '@src/services/tokens';
import {
	ResourceReferenceProvider,
	ResourceDefinitionProvider,
	ResourceTooltipProvider
} from '@src/providers';
import {
	TurtleAutoDefinePrefixProvider,
	TurtleCodeActionsProvider,
	TurtleCodeLensProvider,
	TurtleCompletionItemProvider,
	TurtlePrefixCompletionProvider,
	TurtleRenameProvider,
	TurtleCodeFormattingProvider
} from '@src/languages/turtle/providers';
 
const codeActionsProvider = new TurtleCodeActionsProvider();
const codelensProvider = new TurtleCodeLensProvider();
const completionProvider = new TurtleCompletionItemProvider();
const definitionProvider = new ResourceDefinitionProvider();
const hoverProvider = new ResourceTooltipProvider();
const prefixCompletionProvider = new TurtlePrefixCompletionProvider((uri) => ` <${uri}> .`);
const referenceProvider = new ResourceReferenceProvider();
const renameProvider = new TurtleRenameProvider();
const formattingProvider = new TurtleCodeFormattingProvider();
 
export class TurtleTokenProvider {
	constructor() {
		// Self-register with the extension context for automatic disposal
		const context = container.resolve<vscode.ExtensionContext>(ServiceToken.ExtensionContext);
 
		const autoDefinePrefixProvider = new TurtleAutoDefinePrefixProvider(this.getLanguages());
		context.subscriptions.push(autoDefinePrefixProvider);
 
		for (const language of this.getLanguages()) {
			context.subscriptions.push(...this.registerForLanguage(language));
		}
	}
 
	/**
	 * Returns the languages this provider should register for.
	 * Override in subclasses to register for different languages.
	 */
	protected getLanguages(): string[] {
		return ['ntriples', 'nquads', 'turtle', 'n3'];
	}
 
	protected registerForLanguage(language: string): vscode.Disposable[] {
		return [
			vscode.languages.registerCodeActionsProvider({ language }, codeActionsProvider),
			vscode.languages.registerCodeLensProvider({ language }, codelensProvider),
			vscode.languages.registerCompletionItemProvider({ language }, completionProvider, ':'),
			vscode.languages.registerDefinitionProvider({ language }, definitionProvider),
			vscode.languages.registerHoverProvider({ language }, hoverProvider),
			vscode.languages.registerDocumentFormattingEditProvider({ language }, formattingProvider),
			vscode.languages.registerInlineCompletionItemProvider({ language }, prefixCompletionProvider),
			vscode.languages.registerReferenceProvider({ language }, referenceProvider),
			vscode.languages.registerRenameProvider({ language }, renameProvider),
		]
	}
}