in src/AzureRMTools.ts [1015:1128]
private ensureDeploymentDocumentEventsHookedUp(): void {
if (this._areDeploymentTemplateEventsHookedUp) {
return;
}
this._areDeploymentTemplateEventsHookedUp = true;
// tslint:disable-next-line: no-suspicious-comment
// tslint:disable-next-line: max-func-body-length // TODO: Refactor
callWithTelemetryAndErrorHandlingSync("ensureDeploymentTemplateEventsHookedUp", (actionContext: IActionContext) => {
actionContext.telemetry.suppressIfSuccessful = true;
vscode.window.onDidChangeTextEditorSelection(this.onTextSelectionChanged, this, ext.context.subscriptions);
const hoverProvider: vscode.HoverProvider = {
provideHover: async (document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise<vscode.Hover | undefined> => {
return await this.onProvideHover(document, position, token);
}
};
ext.context.subscriptions.push(vscode.languages.registerHoverProvider(templateDocumentSelector, hoverProvider));
const codeLensProvider: vscode.CodeLensProvider = {
onDidChangeCodeLenses: this._codeLensChangedEmitter.event,
provideCodeLenses: (document: vscode.TextDocument, token: vscode.CancellationToken): vscode.CodeLens[] | undefined => {
return this.onProvideCodeLenses(document, token);
},
resolveCodeLens: async (codeLens: vscode.CodeLens, token: vscode.CancellationToken): Promise<vscode.CodeLens | undefined> => {
return await this.onResolveCodeLens(codeLens, token);
}
};
ext.context.subscriptions.push(vscode.languages.registerCodeLensProvider(templateDocumentSelector, codeLensProvider));
// Code actions provider
const codeActionProvider: vscode.CodeActionProvider = {
provideCodeActions: async (
textDocument: vscode.TextDocument,
range: vscode.Range | vscode.Selection,
context: vscode.CodeActionContext,
token: vscode.CancellationToken
): Promise<(vscode.Command | vscode.CodeAction)[] | undefined> => {
return await this.onProvideCodeActions(textDocument, range, context, token);
}
};
ext.context.subscriptions.push(
vscode.languages.registerCodeActionsProvider(
templateOrParameterDocumentSelector,
codeActionProvider,
{
providedCodeActionKinds: [
vscode.CodeActionKind.QuickFix,
vscode.CodeActionKind.RefactorExtract
]
}
));
// tslint:disable-next-line:no-suspicious-comment
const definitionProvider: vscode.DefinitionProvider = {
provideDefinition: async (document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise<vscode.Definition | undefined> => {
return await this.onProvideDefinition(document, position, token);
}
};
ext.context.subscriptions.push(
vscode.languages.registerDefinitionProvider(
templateOrParameterDocumentSelector,
definitionProvider));
const referenceProvider: vscode.ReferenceProvider = {
provideReferences: async (document: vscode.TextDocument, position: vscode.Position, context: vscode.ReferenceContext, token: vscode.CancellationToken): Promise<vscode.Location[] | undefined> => {
return this.onProvideReferences(document, position, context, token);
}
};
ext.context.subscriptions.push(vscode.languages.registerReferenceProvider(templateOrParameterDocumentSelector, referenceProvider));
const signatureHelpProvider: vscode.SignatureHelpProvider = {
provideSignatureHelp: async (document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise<vscode.SignatureHelp | undefined> => {
return await this.onProvideSignatureHelp(document, position, token);
}
};
ext.context.subscriptions.push(vscode.languages.registerSignatureHelpProvider(templateDocumentSelector, signatureHelpProvider, ",", "(", "\n"));
const renameProvider: vscode.RenameProvider = {
provideRenameEdits: async (document: vscode.TextDocument, position: vscode.Position, newName: string, token: vscode.CancellationToken): Promise<vscode.WorkspaceEdit | undefined> => {
return await this.onProvideRename(document, position, newName, token);
},
prepareRename: async (document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Promise<vscode.Range | { range: vscode.Range; placeholder: string } | undefined> => {
return await this.prepareRename(document, position, token);
}
};
ext.context.subscriptions.push(vscode.languages.registerRenameProvider(templateOrParameterDocumentSelector, renameProvider));
const documentLinkProvider: vscode.DocumentLinkProvider = {
provideDocumentLinks: async (document: vscode.TextDocument, token: vscode.CancellationToken): Promise<vscode.DocumentLink[] | undefined> => {
return await this.provideDocumentLinks(document, token);
}
};
ext.context.subscriptions.push(
vscode.languages.registerDocumentLinkProvider(templateDocumentSelector, documentLinkProvider));
const linkedTemplateDocumentProvider: vscode.TextDocumentContentProvider = {
onDidChange: this._linkedTemplateDocProviderChangedEmitter.event,
provideTextDocumentContent: async (uri: vscode.Uri, _token: vscode.CancellationToken): Promise<string | undefined> => {
return await this.provideContentForNonlocalUri(uri);
}
};
ext.context.subscriptions.push(
vscode.workspace.registerTextDocumentContentProvider(
documentSchemes.linkedTemplate,
linkedTemplateDocumentProvider));
ext.context.subscriptions.push(notifyTemplateGraphAvailable(this.onTemplateGraphAvailable, this));
ext.context.subscriptions.push(ext.languageServerStateChanged(this.onLanguageServerStateChanged, this));
startArmLanguageServerInBackground();
});
}