diff --git a/extensions/css-language-features/client/src/browser/cssClientMain.ts b/extensions/css-language-features/client/src/browser/cssClientMain.ts index 6f309858f44..8b1d7205fcd 100644 --- a/extensions/css-language-features/client/src/browser/cssClientMain.ts +++ b/extensions/css-language-features/client/src/browser/cssClientMain.ts @@ -11,6 +11,9 @@ import { LanguageClient } from 'vscode-languageclient/browser'; declare const Worker: { new(stringUrl: string): any; }; +declare const TextDecoder: { + new(encoding?: string): { decode(buffer: ArrayBuffer): string; }; +}; // this method is called when vs code is activated export function activate(context: ExtensionContext) { @@ -21,7 +24,7 @@ export function activate(context: ExtensionContext) { return new LanguageClient(id, name, clientOptions, worker); }; - startClient(context, newLanguageClient, {}); + startClient(context, newLanguageClient, { TextDecoder }); } catch (e) { console.log(e); diff --git a/extensions/css-language-features/client/src/cssClient.ts b/extensions/css-language-features/client/src/cssClient.ts index d0df1706cd7..4bfa95c8439 100644 --- a/extensions/css-language-features/client/src/cssClient.ts +++ b/extensions/css-language-features/client/src/cssClient.ts @@ -17,7 +17,12 @@ const localize = nls.loadMessageBundle(); export type LanguageClientConstructor = (name: string, description: string, clientOptions: LanguageClientOptions) => CommonLanguageClient; -export function startClient(context: ExtensionContext, newLanguageClient: LanguageClientConstructor, runtime: { fs?: RequestService }) { +export interface Runtime { + TextDecoder: { new(encoding?: string): { decode(buffer: ArrayBuffer): string; } }; + fs?: RequestService; +} + +export function startClient(context: ExtensionContext, newLanguageClient: LanguageClientConstructor, runtime: Runtime) { const customDataSource = getCustomDataSource(context.subscriptions); diff --git a/extensions/css-language-features/client/src/node/cssClientMain.ts b/extensions/css-language-features/client/src/node/cssClientMain.ts index 1c84b2a849f..350e0de02d5 100644 --- a/extensions/css-language-features/client/src/node/cssClientMain.ts +++ b/extensions/css-language-features/client/src/node/cssClientMain.ts @@ -6,8 +6,8 @@ import { getNodeFSRequestService } from './nodeFs'; import { ExtensionContext, extensions } from 'vscode'; import { startClient, LanguageClientConstructor } from '../cssClient'; - import { ServerOptions, TransportKind, LanguageClientOptions, LanguageClient } from 'vscode-languageclient/node'; +import { TextDecoder } from 'util'; // this method is called when vs code is activated export function activate(context: ExtensionContext) { @@ -34,5 +34,5 @@ export function activate(context: ExtensionContext) { return new LanguageClient(id, name, serverOptions, clientOptions); }; - startClient(context, newLanguageClient, { fs: getNodeFSRequestService() }); + startClient(context, newLanguageClient, { fs: getNodeFSRequestService(), TextDecoder }); } diff --git a/extensions/css-language-features/client/src/requests.ts b/extensions/css-language-features/client/src/requests.ts index 522745e0137..1b1e70b2d88 100644 --- a/extensions/css-language-features/client/src/requests.ts +++ b/extensions/css-language-features/client/src/requests.ts @@ -5,7 +5,7 @@ import { Uri, workspace } from 'vscode'; import { RequestType, CommonLanguageClient } from 'vscode-languageclient'; -import { TextDecoder } from 'util'; +import { Runtime } from './cssClient'; export namespace FsContentRequest { export const type: RequestType<{ uri: string; encoding?: string; }, string, any, any> = new RequestType('fs/content'); @@ -18,14 +18,14 @@ export namespace FsReadDirRequest { export const type: RequestType = new RequestType('fs/readDir'); } -export function serveFileSystemRequests(client: CommonLanguageClient, runtime: { fs?: RequestService; }) { +export function serveFileSystemRequests(client: CommonLanguageClient, runtime: Runtime) { client.onRequest(FsContentRequest.type, (param: { uri: string; encoding?: string; }) => { const uri = Uri.parse(param.uri); if (uri.scheme === 'file' && runtime.fs) { return runtime.fs.getContent(param.uri); } return workspace.fs.readFile(uri).then(buffer => { - return new TextDecoder(param.encoding).decode(buffer); + return new runtime.TextDecoder(param.encoding).decode(buffer); }); }); client.onRequest(FsReadDirRequest.type, (uriString: string) => {