/* -------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. * ------------------------------------------------------------------------------------------ */ import * as path from 'path'; import { commands, CompletionList, ExtensionContext, Uri, workspace } from 'vscode'; import { getLanguageService } from 'vscode-html-languageservice'; import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind } from 'vscode-languageclient'; import { getCSSVirtualContent, isInsideStyleRegion } from './embeddedSupport'; let client: LanguageClient; const htmlLanguageService = getLanguageService(); export function activate(context: ExtensionContext) { // The server is implemented in node const serverModule = context.asAbsolutePath(path.join('server', 'out', 'server.js')); // If the extension is launched in debug mode then the debug server options are used // Otherwise the run options are used const serverOptions: ServerOptions = { run: { module: serverModule, transport: TransportKind.ipc }, debug: { module: serverModule, transport: TransportKind.ipc, } }; const virtualDocumentContents = new Map(); workspace.registerTextDocumentContentProvider('embedded-content', { provideTextDocumentContent: uri => { const originalUri = uri.path.slice(1).slice(0, -4); const decodedUri = decodeURIComponent(originalUri); return virtualDocumentContents.get(decodedUri); } }); const clientOptions: LanguageClientOptions = { documentSelector: [{ scheme: 'file', language: 'html1' }], middleware: { provideCompletionItem: async (document, position, context, token, next) => { // If not in `