Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/microsoft/vscode.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Aeschlimann <martinae@microsoft.com>2022-05-19 13:48:53 +0300
committerGitHub <noreply@github.com>2022-05-19 13:48:53 +0300
commite783fdc25e8edee0aed71f05f3bacafe962359ab (patch)
tree157e7763094a7b7e4cfbf4fbb2708780c44a450d /extensions
parent14925e336de15a41da04deacea2150dcff77ae16 (diff)
css/html/json update to lsp 8 (#148715)
Diffstat (limited to 'extensions')
-rw-r--r--extensions/css-language-features/client/src/browser/cssClientMain.ts16
-rw-r--r--extensions/css-language-features/client/src/cssClient.ts43
-rw-r--r--extensions/css-language-features/client/src/node/cssClientMain.ts16
-rw-r--r--extensions/css-language-features/client/src/requests.ts4
-rw-r--r--extensions/css-language-features/package.json17
-rw-r--r--extensions/css-language-features/server/package.json4
-rw-r--r--extensions/css-language-features/server/src/cssServer.ts23
-rw-r--r--extensions/css-language-features/server/yarn.lock58
-rw-r--r--extensions/css-language-features/yarn.lock48
-rw-r--r--extensions/html-language-features/client/src/browser/htmlClientMain.ts16
-rw-r--r--extensions/html-language-features/client/src/htmlClient.ts123
-rw-r--r--extensions/html-language-features/client/src/node/htmlClientMain.ts14
-rw-r--r--extensions/html-language-features/client/src/requests.ts4
-rw-r--r--extensions/html-language-features/package.json6
-rw-r--r--extensions/html-language-features/server/package.json10
-rw-r--r--extensions/html-language-features/server/src/htmlServer.ts14
-rw-r--r--extensions/html-language-features/server/src/modes/cssMode.ts4
-rw-r--r--extensions/html-language-features/server/src/modes/javascriptMode.ts29
-rw-r--r--extensions/html-language-features/server/src/modes/languageModes.ts10
-rw-r--r--extensions/html-language-features/server/yarn.lock75
-rw-r--r--extensions/html-language-features/yarn.lock68
-rw-r--r--extensions/json-language-features/client/src/browser/jsonClientMain.ts15
-rw-r--r--extensions/json-language-features/client/src/jsonClient.ts320
-rw-r--r--extensions/json-language-features/client/src/node/jsonClientMain.ts13
-rw-r--r--extensions/json-language-features/package.json4
-rw-r--r--extensions/json-language-features/server/package.json4
-rw-r--r--extensions/json-language-features/server/src/jsonServer.ts20
-rw-r--r--extensions/json-language-features/server/yarn.lock68
-rw-r--r--extensions/json-language-features/yarn.lock60
-rw-r--r--extensions/vscode-colorize-tests/test/colorize-fixtures/test.html2
30 files changed, 589 insertions, 519 deletions
diff --git a/extensions/css-language-features/client/src/browser/cssClientMain.ts b/extensions/css-language-features/client/src/browser/cssClientMain.ts
index 0cfde9025f3..8fa2d81bd03 100644
--- a/extensions/css-language-features/client/src/browser/cssClientMain.ts
+++ b/extensions/css-language-features/client/src/browser/cssClientMain.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { ExtensionContext, Uri } from 'vscode';
-import { LanguageClientOptions } from 'vscode-languageclient';
+import { BaseLanguageClient, LanguageClientOptions } from 'vscode-languageclient';
import { startClient, LanguageClientConstructor } from '../cssClient';
import { LanguageClient } from 'vscode-languageclient/browser';
@@ -15,8 +15,10 @@ declare const TextDecoder: {
new(encoding?: string): { decode(buffer: ArrayBuffer): string };
};
+let client: BaseLanguageClient | undefined;
+
// this method is called when vs code is activated
-export function activate(context: ExtensionContext) {
+export async function activate(context: ExtensionContext) {
const serverMain = Uri.joinPath(context.extensionUri, 'server/dist/browser/cssServerMain.js');
try {
const worker = new Worker(serverMain.toString());
@@ -24,9 +26,17 @@ export function activate(context: ExtensionContext) {
return new LanguageClient(id, name, clientOptions, worker);
};
- startClient(context, newLanguageClient, { TextDecoder });
+ client = await startClient(context, newLanguageClient, { TextDecoder });
} catch (e) {
console.log(e);
}
}
+
+export async function deactivate(): Promise<void> {
+ if (client) {
+ await client.stop();
+ client = undefined;
+ }
+}
+
diff --git a/extensions/css-language-features/client/src/cssClient.ts b/extensions/css-language-features/client/src/cssClient.ts
index 282c347bdd8..6f6238465d8 100644
--- a/extensions/css-language-features/client/src/cssClient.ts
+++ b/extensions/css-language-features/client/src/cssClient.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { commands, CompletionItem, CompletionItemKind, ExtensionContext, languages, Position, Range, SnippetString, TextEdit, window, TextDocument, CompletionContext, CancellationToken, ProviderResult, CompletionList, FormattingOptions, workspace } from 'vscode';
-import { Disposable, LanguageClientOptions, ProvideCompletionItemsSignature, NotificationType, CommonLanguageClient, DocumentRangeFormattingParams, DocumentRangeFormattingRequest } from 'vscode-languageclient';
+import { Disposable, LanguageClientOptions, ProvideCompletionItemsSignature, NotificationType, BaseLanguageClient, DocumentRangeFormattingParams, DocumentRangeFormattingRequest } from 'vscode-languageclient';
import * as nls from 'vscode-nls';
import { getCustomDataSource } from './customData';
import { RequestService, serveFileSystemRequests } from './requests';
@@ -15,7 +15,7 @@ namespace CustomDataChangedNotification {
const localize = nls.loadMessageBundle();
-export type LanguageClientConstructor = (name: string, description: string, clientOptions: LanguageClientOptions) => CommonLanguageClient;
+export type LanguageClientConstructor = (name: string, description: string, clientOptions: LanguageClientOptions) => BaseLanguageClient;
export interface Runtime {
TextDecoder: { new(encoding?: string): { decode(buffer: ArrayBuffer): string } };
@@ -39,7 +39,7 @@ interface CSSFormatSettings {
const cssFormatSettingKeys: (keyof CSSFormatSettings)[] = ['newlineBetweenSelectors', 'newlineBetweenRules', 'spaceAroundSelectorSeparator', 'braceStyle', 'preserveNewLines', 'maxPreserveNewLines'];
-export function startClient(context: ExtensionContext, newLanguageClient: LanguageClientConstructor, runtime: Runtime) {
+export async function startClient(context: ExtensionContext, newLanguageClient: LanguageClientConstructor, runtime: Runtime): Promise<BaseLanguageClient> {
const customDataSource = getCustomDataSource(context.subscriptions);
@@ -100,31 +100,25 @@ export function startClient(context: ExtensionContext, newLanguageClient: Langua
// Create the language client and start the client.
let client = newLanguageClient('css', localize('cssserver.name', 'CSS Language Server'), clientOptions);
client.registerProposedFeatures();
- client.onReady().then(() => {
+ await client.start();
+
+ client.sendNotification(CustomDataChangedNotification.type, customDataSource.uris);
+ customDataSource.onDidChange(() => {
client.sendNotification(CustomDataChangedNotification.type, customDataSource.uris);
- customDataSource.onDidChange(() => {
- client.sendNotification(CustomDataChangedNotification.type, customDataSource.uris);
- });
+ });
- // manually register / deregister format provider based on the `css/less/scss.format.enable` setting avoiding issues with late registration. See #71652.
- for (const registration of formatterRegistrations) {
- updateFormatterRegistration(registration);
- context.subscriptions.push({ dispose: () => registration.provider?.dispose() });
- context.subscriptions.push(workspace.onDidChangeConfiguration(e => e.affectsConfiguration(registration.settingId) && updateFormatterRegistration(registration)));
- }
+ // manually register / deregister format provider based on the `css/less/scss.format.enable` setting avoiding issues with late registration. See #71652.
+ for (const registration of formatterRegistrations) {
+ updateFormatterRegistration(registration);
+ context.subscriptions.push({ dispose: () => registration.provider?.dispose() });
+ context.subscriptions.push(workspace.onDidChangeConfiguration(e => e.affectsConfiguration(registration.settingId) && updateFormatterRegistration(registration)));
+ }
- serveFileSystemRequests(client, runtime);
- });
+ serveFileSystemRequests(client, runtime);
- let disposable = client.start();
- // Push the disposable to the context's subscriptions so that the
- // client can be deactivated on extension deactivation
- context.subscriptions.push(disposable);
- client.onReady().then(() => {
- context.subscriptions.push(initCompletionProvider());
- });
+ context.subscriptions.push(initCompletionProvider());
function initCompletionProvider(): Disposable {
const regionCompletionRegExpr = /^(\s*)(\/(\*\s*(#\w*)?)?)?$/;
@@ -204,11 +198,10 @@ export function startClient(context: ExtensionContext, newLanguageClient: Langua
}
}
}
- console.log(JSON.stringify(params.options));
return client.sendRequest(DocumentRangeFormattingRequest.type, params, token).then(
client.protocol2CodeConverter.asTextEdits,
(error) => {
- client.handleFailedRequest(DocumentRangeFormattingRequest.type, error, []);
+ client.handleFailedRequest(DocumentRangeFormattingRequest.type, undefined, error, []);
return Promise.resolve([]);
}
);
@@ -216,4 +209,6 @@ export function startClient(context: ExtensionContext, newLanguageClient: Langua
});
}
}
+
+ return client;
}
diff --git a/extensions/css-language-features/client/src/node/cssClientMain.ts b/extensions/css-language-features/client/src/node/cssClientMain.ts
index b88838d8912..dfbe121f822 100644
--- a/extensions/css-language-features/client/src/node/cssClientMain.ts
+++ b/extensions/css-language-features/client/src/node/cssClientMain.ts
@@ -6,11 +6,14 @@
import { getNodeFSRequestService } from './nodeFs';
import { ExtensionContext, extensions } from 'vscode';
import { startClient, LanguageClientConstructor } from '../cssClient';
-import { ServerOptions, TransportKind, LanguageClientOptions, LanguageClient } from 'vscode-languageclient/node';
+import { ServerOptions, TransportKind, LanguageClientOptions, LanguageClient, BaseLanguageClient } from 'vscode-languageclient/node';
import { TextDecoder } from 'util';
+
+let client: BaseLanguageClient | undefined;
+
// this method is called when vs code is activated
-export function activate(context: ExtensionContext) {
+export async function activate(context: ExtensionContext) {
const clientMain = extensions.getExtension('vscode.css-language-features')?.packageJSON?.main || '';
const serverMain = `./server/${clientMain.indexOf('/dist/') !== -1 ? 'dist' : 'out'}/node/cssServerMain`;
@@ -30,5 +33,12 @@ export function activate(context: ExtensionContext) {
return new LanguageClient(id, name, serverOptions, clientOptions);
};
- startClient(context, newLanguageClient, { fs: getNodeFSRequestService(), TextDecoder });
+ client = await startClient(context, newLanguageClient, { fs: getNodeFSRequestService(), TextDecoder });
+}
+
+export async function deactivate(): Promise<void> {
+ if (client) {
+ await client.stop();
+ client = undefined;
+ }
}
diff --git a/extensions/css-language-features/client/src/requests.ts b/extensions/css-language-features/client/src/requests.ts
index 6aea3ab8fad..f19918e57ef 100644
--- a/extensions/css-language-features/client/src/requests.ts
+++ b/extensions/css-language-features/client/src/requests.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { Uri, workspace } from 'vscode';
-import { RequestType, CommonLanguageClient } from 'vscode-languageclient';
+import { RequestType, BaseLanguageClient } from 'vscode-languageclient';
import { Runtime } from './cssClient';
export namespace FsContentRequest {
@@ -18,7 +18,7 @@ export namespace FsReadDirRequest {
export const type: RequestType<string, [string, FileType][], any> = new RequestType('fs/readDir');
}
-export function serveFileSystemRequests(client: CommonLanguageClient, runtime: Runtime) {
+export function serveFileSystemRequests(client: BaseLanguageClient, runtime: Runtime) {
client.onRequest(FsContentRequest.type, (param: { uri: string; encoding?: string }) => {
const uri = Uri.parse(param.uri);
if (uri.scheme === 'file' && runtime.fs) {
diff --git a/extensions/css-language-features/package.json b/extensions/css-language-features/package.json
index e9ea587d4db..c4955243c8f 100644
--- a/extensions/css-language-features/package.json
+++ b/extensions/css-language-features/package.json
@@ -336,7 +336,10 @@
"type": "string",
"scope": "resource",
"default": "collapse",
- "enum": ["collapse", "expand"],
+ "enum": [
+ "collapse",
+ "expand"
+ ],
"markdownDescription": "%css.format.braceStyle.desc%"
},
"css.format.preserveNewLines": {
@@ -638,7 +641,10 @@
"type": "string",
"scope": "resource",
"default": "collapse",
- "enum": ["collapse", "expand"],
+ "enum": [
+ "collapse",
+ "expand"
+ ],
"markdownDescription": "%scss.format.braceStyle.desc%"
},
"scss.format.preserveNewLines": {
@@ -941,7 +947,10 @@
"type": "string",
"scope": "resource",
"default": "collapse",
- "enum": ["collapse", "expand"],
+ "enum": [
+ "collapse",
+ "expand"
+ ],
"markdownDescription": "%less.format.braceStyle.desc%"
},
"less.format.preserveNewLines": {
@@ -985,7 +994,7 @@
]
},
"dependencies": {
- "vscode-languageclient": "^7.0.0",
+ "vscode-languageclient": "^8.0.1",
"vscode-nls": "^5.0.0",
"vscode-uri": "^3.0.3"
},
diff --git a/extensions/css-language-features/server/package.json b/extensions/css-language-features/server/package.json
index 18c39540516..d2f0443e65b 100644
--- a/extensions/css-language-features/server/package.json
+++ b/extensions/css-language-features/server/package.json
@@ -10,8 +10,8 @@
"main": "./out/node/cssServerMain",
"browser": "./dist/browser/cssServerMain",
"dependencies": {
- "vscode-css-languageservice": "^5.4.2",
- "vscode-languageserver": "^7.0.0",
+ "vscode-css-languageservice": "^6.0.1",
+ "vscode-languageserver": "^8.0.1",
"vscode-uri": "^3.0.3"
},
"devDependencies": {
diff --git a/extensions/css-language-features/server/src/cssServer.ts b/extensions/css-language-features/server/src/cssServer.ts
index 40e05b13ab1..3eed3962879 100644
--- a/extensions/css-language-features/server/src/cssServer.ts
+++ b/extensions/css-language-features/server/src/cssServer.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import {
- Connection, TextDocuments, InitializeParams, InitializeResult, ServerCapabilities, ConfigurationRequest, WorkspaceFolder, TextDocumentSyncKind, NotificationType, Disposable, TextDocumentIdentifier, Range, FormattingOptions, TextEdit
+ Connection, TextDocuments, InitializeParams, InitializeResult, ServerCapabilities, ConfigurationRequest, WorkspaceFolder, TextDocumentSyncKind, NotificationType, Disposable, TextDocumentIdentifier, Range, FormattingOptions, TextEdit, Diagnostic
} from 'vscode-languageserver';
import { URI } from 'vscode-uri';
import { getCSSLanguageService, getSCSSLanguageService, getLESSLanguageService, LanguageSettings, LanguageService, Stylesheet, TextDocument, Position, CSSFormatConfiguration } from 'vscode-css-languageservice';
@@ -64,6 +64,9 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
// After the server has started the client sends an initialize request. The server receives
// in the passed params the rootPath of the workspace plus the client capabilities.
connection.onInitialize((params: InitializeParams): InitializeResult => {
+
+ const initializationOptions = params.initializationOptions as any || {};
+
workspaceFolders = (<any>params).workspaceFolders;
if (!Array.isArray(workspaceFolders)) {
workspaceFolders = [];
@@ -72,7 +75,7 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
}
}
- requestService = getRequestService(params.initializationOptions?.handledSchemas || ['file'], connection, runtime);
+ requestService = getRequestService(initializationOptions?.handledSchemas || ['file'], connection, runtime);
function getClientCapability<T>(name: string, def: T) {
const keys = name.split('.');
@@ -88,7 +91,7 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
const snippetSupport = !!getClientCapability('textDocument.completion.completionItem.snippetSupport', false);
scopedSettingsSupport = !!getClientCapability('workspace.configuration', false);
foldingRangeLimit = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE);
- formatterMaxNumberOfEdits = params.initializationOptions?.customCapabilities?.rangeFormatting?.editLimit || Number.MAX_VALUE;
+ formatterMaxNumberOfEdits = initializationOptions?.customCapabilities?.rangeFormatting?.editLimit || Number.MAX_VALUE;
languageServices.css = getCSSLanguageService({ fileSystemProvider: requestService, clientCapabilities: params.capabilities });
languageServices.scss = getSCSSLanguageService({ fileSystemProvider: requestService, clientCapabilities: params.capabilities });
@@ -110,8 +113,8 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
colorProvider: {},
foldingRangeProvider: true,
selectionRangeProvider: true,
- documentRangeFormattingProvider: params.initializationOptions?.provideFormatter === true,
- documentFormattingProvider: params.initializationOptions?.provideFormatter === true,
+ documentRangeFormattingProvider: initializationOptions?.provideFormatter === true,
+ documentFormattingProvider: initializationOptions?.provideFormatter === true,
};
return { capabilities };
});
@@ -135,7 +138,7 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
let promise = documentSettings[textDocument.uri];
if (!promise) {
const configRequestParam = { items: [{ scopeUri: textDocument.uri, section: textDocument.languageId }] };
- promise = connection.sendRequest(ConfigurationRequest.type, configRequestParam).then(s => s[0]);
+ promise = connection.sendRequest(ConfigurationRequest.type, configRequestParam).then(s => s[0] as LanguageSettings | undefined);
documentSettings[textDocument.uri] = promise;
}
return promise;
@@ -145,12 +148,12 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
// The settings have changed. Is send on server activation as well.
connection.onDidChangeConfiguration(change => {
- updateConfiguration(<Settings>change.settings);
+ updateConfiguration(change.settings as any);
});
- function updateConfiguration(settings: Settings) {
+ function updateConfiguration(settings: any) {
for (const languageId in languageServices) {
- languageServices[languageId].configure((settings as any)[languageId]);
+ languageServices[languageId].configure(settings[languageId]);
}
// reset all document settings
documentSettings = {};
@@ -193,7 +196,7 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
const settingsPromise = getDocumentSettings(textDocument);
Promise.all([settingsPromise, dataProvidersReady]).then(async ([settings]) => {
const stylesheet = stylesheets.get(textDocument);
- const diagnostics = getLanguageService(textDocument).doValidation(textDocument, stylesheet, settings);
+ const diagnostics = getLanguageService(textDocument).doValidation(textDocument, stylesheet, settings) as Diagnostic[];
// Send the computed diagnostics to VSCode.
connection.sendDiagnostics({ uri: textDocument.uri, diagnostics });
}, e => {
diff --git a/extensions/css-language-features/server/yarn.lock b/extensions/css-language-features/server/yarn.lock
index b7a44bc52c4..8749dcdebad 100644
--- a/extensions/css-language-features/server/yarn.lock
+++ b/extensions/css-language-features/server/yarn.lock
@@ -12,50 +12,50 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae"
integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==
-vscode-css-languageservice@^5.4.2:
- version "5.4.2"
- resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.4.2.tgz#69ea74c000bd653dfc8e458a1720d28b9ffa5cfb"
- integrity sha512-DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg==
+vscode-css-languageservice@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-6.0.1.tgz#ccf94944e094dcc5833d1b4ac276994b698e9283"
+ integrity sha512-81n/eeYuJwQdvpoy6IK1258PtPbO720fl13FcJ5YQECPyHMFkmld1qKHwPJkyLbLPfboqJPM53ys4xW8v+iBVw==
dependencies:
vscode-languageserver-textdocument "^1.0.4"
- vscode-languageserver-types "^3.16.0"
- vscode-nls "^5.0.0"
+ vscode-languageserver-types "^3.17.1"
+ vscode-nls "^5.0.1"
vscode-uri "^3.0.3"
-vscode-jsonrpc@6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e"
- integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==
+vscode-jsonrpc@8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz#f30b0625ebafa0fb3bc53e934ca47b706445e57e"
+ integrity sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==
-vscode-languageserver-protocol@3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821"
- integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==
+vscode-languageserver-protocol@3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz#e801762c304f740208b6c804a0cf21f2c87509ed"
+ integrity sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==
dependencies:
- vscode-jsonrpc "6.0.0"
- vscode-languageserver-types "3.16.0"
+ vscode-jsonrpc "8.0.1"
+ vscode-languageserver-types "3.17.1"
vscode-languageserver-textdocument@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz#3cd56dd14cec1d09e86c4bb04b09a246cb3df157"
integrity sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==
-vscode-languageserver-types@3.16.0, vscode-languageserver-types@^3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247"
- integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==
+vscode-languageserver-types@3.17.1, vscode-languageserver-types@^3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz#c2d87fa7784f8cac389deb3ff1e2d9a7bef07e16"
+ integrity sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==
-vscode-languageserver@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz#49b068c87cfcca93a356969d20f5d9bdd501c6b0"
- integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==
+vscode-languageserver@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.0.1.tgz#56bd7a01f5c88af075a77f1d220edcb30fc4bdc7"
+ integrity sha512-sn7SjBwWm3OlmLtgg7jbM0wBULppyL60rj8K5HF0ny/MzN+GzPBX1kCvYdybhl7UW63V5V5tRVnyB8iwC73lSQ==
dependencies:
- vscode-languageserver-protocol "3.16.0"
+ vscode-languageserver-protocol "3.17.1"
-vscode-nls@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840"
- integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==
+vscode-nls@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.1.tgz#ba23fc4d4420d25e7f886c8e83cbdcec47aa48b2"
+ integrity sha512-hHQV6iig+M21lTdItKPkJAaWrxALQb/nqpVffakO4knJOh3DrU2SXOMzUzNgo1eADPzu3qSsJY1weCzvR52q9A==
vscode-uri@^3.0.3:
version "3.0.3"
diff --git a/extensions/css-language-features/yarn.lock b/extensions/css-language-features/yarn.lock
index 60ba7c2dcc3..76af92973f2 100644
--- a/extensions/css-language-features/yarn.lock
+++ b/extensions/css-language-features/yarn.lock
@@ -39,39 +39,39 @@ minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
-semver@^7.3.4:
- version "7.3.4"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
- integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
+semver@^7.3.5:
+ version "7.3.7"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
+ integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
dependencies:
lru-cache "^6.0.0"
-vscode-jsonrpc@6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e"
- integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==
+vscode-jsonrpc@8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz#f30b0625ebafa0fb3bc53e934ca47b706445e57e"
+ integrity sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==
-vscode-languageclient@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz#b505c22c21ffcf96e167799757fca07a6bad0fb2"
- integrity sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==
+vscode-languageclient@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-8.0.1.tgz#bf5535c4463a78daeaca0bcb4f5868aec86bb301"
+ integrity sha512-9XoE+HJfaWvu7Y75H3VmLo5WLCtsbxEgEhrLPqwt7eyoR49lUIyyrjb98Yfa50JCMqF2cePJAEVI6oe2o1sIhw==
dependencies:
minimatch "^3.0.4"
- semver "^7.3.4"
- vscode-languageserver-protocol "3.16.0"
+ semver "^7.3.5"
+ vscode-languageserver-protocol "3.17.1"
-vscode-languageserver-protocol@3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821"
- integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==
+vscode-languageserver-protocol@3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz#e801762c304f740208b6c804a0cf21f2c87509ed"
+ integrity sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==
dependencies:
- vscode-jsonrpc "6.0.0"
- vscode-languageserver-types "3.16.0"
+ vscode-jsonrpc "8.0.1"
+ vscode-languageserver-types "3.17.1"
-vscode-languageserver-types@3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247"
- integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==
+vscode-languageserver-types@3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz#c2d87fa7784f8cac389deb3ff1e2d9a7bef07e16"
+ integrity sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==
vscode-nls@^5.0.0:
version "5.0.0"
diff --git a/extensions/html-language-features/client/src/browser/htmlClientMain.ts b/extensions/html-language-features/client/src/browser/htmlClientMain.ts
index b69cca75854..ab23520fe79 100644
--- a/extensions/html-language-features/client/src/browser/htmlClientMain.ts
+++ b/extensions/html-language-features/client/src/browser/htmlClientMain.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { Disposable, ExtensionContext, Uri } from 'vscode';
-import { LanguageClientOptions } from 'vscode-languageclient';
+import { BaseLanguageClient, LanguageClientOptions } from 'vscode-languageclient';
import { startClient, LanguageClientConstructor } from '../htmlClient';
import { LanguageClient } from 'vscode-languageclient/browser';
@@ -15,8 +15,10 @@ declare const TextDecoder: {
new(encoding?: string): { decode(buffer: ArrayBuffer): string };
};
+let client: BaseLanguageClient | undefined;
+
// this method is called when vs code is activated
-export function activate(context: ExtensionContext) {
+export async function activate(context: ExtensionContext) {
const serverMain = Uri.joinPath(context.extensionUri, 'server/dist/browser/htmlServerMain.js');
try {
const worker = new Worker(serverMain.toString());
@@ -31,9 +33,17 @@ export function activate(context: ExtensionContext) {
}
};
- startClient(context, newLanguageClient, { TextDecoder, timer });
+ client = await startClient(context, newLanguageClient, { TextDecoder, timer });
} catch (e) {
console.log(e);
}
}
+
+export async function deactivate(): Promise<void> {
+ if (client) {
+ await client.stop();
+ client = undefined;
+ }
+}
+
diff --git a/extensions/html-language-features/client/src/htmlClient.ts b/extensions/html-language-features/client/src/htmlClient.ts
index 7baceece6fb..6c44ceb72a8 100644
--- a/extensions/html-language-features/client/src/htmlClient.ts
+++ b/extensions/html-language-features/client/src/htmlClient.ts
@@ -13,7 +13,7 @@ import {
} from 'vscode';
import {
LanguageClientOptions, RequestType, DocumentRangeFormattingParams,
- DocumentRangeFormattingRequest, ProvideCompletionItemsSignature, TextDocumentIdentifier, RequestType0, Range as LspRange, Position as LspPosition, NotificationType, CommonLanguageClient
+ DocumentRangeFormattingRequest, ProvideCompletionItemsSignature, TextDocumentIdentifier, RequestType0, Range as LspRange, Position as LspPosition, NotificationType, BaseLanguageClient
} from 'vscode-languageclient';
import { FileSystemProvider, serveFileSystemRequests } from './requests';
import { getCustomDataSource } from './customData';
@@ -72,7 +72,7 @@ export interface TelemetryReporter {
}): void;
}
-export type LanguageClientConstructor = (name: string, description: string, clientOptions: LanguageClientOptions) => CommonLanguageClient;
+export type LanguageClientConstructor = (name: string, description: string, clientOptions: LanguageClientOptions) => BaseLanguageClient;
export interface Runtime {
TextDecoder: { new(encoding?: string): { decode(buffer: ArrayBuffer): string } };
@@ -83,18 +83,17 @@ export interface Runtime {
};
}
-export function startClient(context: ExtensionContext, newLanguageClient: LanguageClientConstructor, runtime: Runtime) {
+export async function startClient(context: ExtensionContext, newLanguageClient: LanguageClientConstructor, runtime: Runtime): Promise<BaseLanguageClient> {
- let toDispose = context.subscriptions;
+ const toDispose = context.subscriptions;
-
- let documentSelector = ['html', 'handlebars'];
- let embeddedLanguages = { css: true, javascript: true };
+ const documentSelector = ['html', 'handlebars'];
+ const embeddedLanguages = { css: true, javascript: true };
let rangeFormatting: Disposable | undefined = undefined;
// Options to control the language client
- let clientOptions: LanguageClientOptions = {
+ const clientOptions: LanguageClientOptions = {
documentSelector,
synchronize: {
configurationSection: ['html', 'css', 'javascript'], // the settings to synchronize
@@ -135,68 +134,66 @@ export function startClient(context: ExtensionContext, newLanguageClient: Langua
let client = newLanguageClient('html', localize('htmlserver.name', 'HTML Language Server'), clientOptions);
client.registerProposedFeatures();
- let disposable = client.start();
- toDispose.push(disposable);
- client.onReady().then(() => {
+ await client.start();
- toDispose.push(serveFileSystemRequests(client, runtime));
+ toDispose.push(serveFileSystemRequests(client, runtime));
- const customDataSource = getCustomDataSource(runtime, context.subscriptions);
+ const customDataSource = getCustomDataSource(runtime, context.subscriptions);
+ client.sendNotification(CustomDataChangedNotification.type, customDataSource.uris);
+ customDataSource.onDidChange(() => {
client.sendNotification(CustomDataChangedNotification.type, customDataSource.uris);
- customDataSource.onDidChange(() => {
- client.sendNotification(CustomDataChangedNotification.type, customDataSource.uris);
- });
- client.onRequest(CustomDataContent.type, customDataSource.getContent);
+ });
+ client.onRequest(CustomDataContent.type, customDataSource.getContent);
- const insertRequestor = (kind: 'autoQuote' | 'autoClose', document: TextDocument, position: Position): Promise<string> => {
- let param: AutoInsertParams = {
- kind,
- textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
- position: client.code2ProtocolConverter.asPosition(position)
- };
- return client.sendRequest(AutoInsertRequest.type, param);
+ const insertRequestor = (kind: 'autoQuote' | 'autoClose', document: TextDocument, position: Position): Promise<string> => {
+ const param: AutoInsertParams = {
+ kind,
+ textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
+ position: client.code2ProtocolConverter.asPosition(position)
};
- let disposable = activateAutoInsertion(insertRequestor, { html: true, handlebars: true }, runtime);
- toDispose.push(disposable);
-
- disposable = client.onTelemetry(e => {
- runtime.telemetry?.sendTelemetryEvent(e.key, e.data);
- });
- toDispose.push(disposable);
-
- // manually register / deregister format provider based on the `html.format.enable` setting avoiding issues with late registration. See #71652.
- updateFormatterRegistration();
- toDispose.push({ dispose: () => rangeFormatting && rangeFormatting.dispose() });
- toDispose.push(workspace.onDidChangeConfiguration(e => e.affectsConfiguration(SettingIds.formatEnable) && updateFormatterRegistration()));
-
- client.sendRequest(SemanticTokenLegendRequest.type).then(legend => {
- if (legend) {
- const provider: DocumentSemanticTokensProvider & DocumentRangeSemanticTokensProvider = {
- provideDocumentSemanticTokens(doc) {
- const params: SemanticTokenParams = {
- textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(doc),
- };
- return client.sendRequest(SemanticTokenRequest.type, params).then(data => {
- return data && new SemanticTokens(new Uint32Array(data));
- });
- },
- provideDocumentRangeSemanticTokens(doc, range) {
- const params: SemanticTokenParams = {
- textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(doc),
- ranges: [client.code2ProtocolConverter.asRange(range)]
- };
- return client.sendRequest(SemanticTokenRequest.type, params).then(data => {
- return data && new SemanticTokens(new Uint32Array(data));
- });
- }
- };
- toDispose.push(languages.registerDocumentSemanticTokensProvider(documentSelector, provider, new SemanticTokensLegend(legend.types, legend.modifiers)));
- }
- });
+ return client.sendRequest(AutoInsertRequest.type, param);
+ };
+ const disposable = activateAutoInsertion(insertRequestor, { html: true, handlebars: true }, runtime);
+ toDispose.push(disposable);
+
+ const disposable2 = client.onTelemetry(e => {
+ runtime.telemetry?.sendTelemetryEvent(e.key, e.data);
+ });
+ toDispose.push(disposable2);
+
+ // manually register / deregister format provider based on the `html.format.enable` setting avoiding issues with late registration. See #71652.
+ updateFormatterRegistration();
+ toDispose.push({ dispose: () => rangeFormatting && rangeFormatting.dispose() });
+ toDispose.push(workspace.onDidChangeConfiguration(e => e.affectsConfiguration(SettingIds.formatEnable) && updateFormatterRegistration()));
+
+ client.sendRequest(SemanticTokenLegendRequest.type).then(legend => {
+ if (legend) {
+ const provider: DocumentSemanticTokensProvider & DocumentRangeSemanticTokensProvider = {
+ provideDocumentSemanticTokens(doc) {
+ const params: SemanticTokenParams = {
+ textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(doc),
+ };
+ return client.sendRequest(SemanticTokenRequest.type, params).then(data => {
+ return data && new SemanticTokens(new Uint32Array(data));
+ });
+ },
+ provideDocumentRangeSemanticTokens(doc, range) {
+ const params: SemanticTokenParams = {
+ textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(doc),
+ ranges: [client.code2ProtocolConverter.asRange(range)]
+ };
+ return client.sendRequest(SemanticTokenRequest.type, params).then(data => {
+ return data && new SemanticTokens(new Uint32Array(data));
+ });
+ }
+ };
+ toDispose.push(languages.registerDocumentSemanticTokensProvider(documentSelector, provider, new SemanticTokensLegend(legend.types, legend.modifiers)));
+ }
});
+
function updateFormatterRegistration() {
const formatEnabled = workspace.getConfiguration().get(SettingIds.formatEnable);
if (!formatEnabled && rangeFormatting) {
@@ -219,7 +216,7 @@ export function startClient(context: ExtensionContext, newLanguageClient: Langua
return client.sendRequest(DocumentRangeFormattingRequest.type, params, token).then(
client.protocol2CodeConverter.asTextEdits,
(error) => {
- client.handleFailedRequest(DocumentRangeFormattingRequest.type, error, []);
+ client.handleFailedRequest(DocumentRangeFormattingRequest.type, undefined, error, []);
return Promise.resolve([]);
}
);
@@ -300,4 +297,6 @@ export function startClient(context: ExtensionContext, newLanguageClient: Langua
}
}
+ return client;
+
}
diff --git a/extensions/html-language-features/client/src/node/htmlClientMain.ts b/extensions/html-language-features/client/src/node/htmlClientMain.ts
index 4c7d24e397c..f460d0c1524 100644
--- a/extensions/html-language-features/client/src/node/htmlClientMain.ts
+++ b/extensions/html-language-features/client/src/node/htmlClientMain.ts
@@ -6,16 +6,17 @@
import { getNodeFileFS } from './nodeFs';
import { Disposable, ExtensionContext } from 'vscode';
import { startClient, LanguageClientConstructor } from '../htmlClient';
-import { ServerOptions, TransportKind, LanguageClientOptions, LanguageClient } from 'vscode-languageclient/node';
+import { ServerOptions, TransportKind, LanguageClientOptions, LanguageClient, BaseLanguageClient } from 'vscode-languageclient/node';
import { TextDecoder } from 'util';
import * as fs from 'fs';
import TelemetryReporter from '@vscode/extension-telemetry';
let telemetry: TelemetryReporter | undefined;
+let client: BaseLanguageClient | undefined;
// this method is called when vs code is activated
-export function activate(context: ExtensionContext) {
+export async function activate(context: ExtensionContext) {
let clientPackageJSON = getPackageInfo(context);
telemetry = new TelemetryReporter(clientPackageJSON.name, clientPackageJSON.version, clientPackageJSON.aiKey);
@@ -44,7 +45,14 @@ export function activate(context: ExtensionContext) {
}
};
- startClient(context, newLanguageClient, { fileFs: getNodeFileFS(), TextDecoder, telemetry, timer });
+ client = await startClient(context, newLanguageClient, { fileFs: getNodeFileFS(), TextDecoder, telemetry, timer });
+}
+
+export async function deactivate(): Promise<void> {
+ if (client) {
+ await client.stop();
+ client = undefined;
+ }
}
interface IPackageInfo {
diff --git a/extensions/html-language-features/client/src/requests.ts b/extensions/html-language-features/client/src/requests.ts
index ba124e28cd7..8106f044228 100644
--- a/extensions/html-language-features/client/src/requests.ts
+++ b/extensions/html-language-features/client/src/requests.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { Uri, workspace, Disposable } from 'vscode';
-import { RequestType, CommonLanguageClient } from 'vscode-languageclient';
+import { RequestType, BaseLanguageClient } from 'vscode-languageclient';
import { Runtime } from './htmlClient';
export namespace FsStatRequest {
@@ -15,7 +15,7 @@ export namespace FsReadDirRequest {
export const type: RequestType<string, [string, FileType][], any> = new RequestType('fs/readDir');
}
-export function serveFileSystemRequests(client: CommonLanguageClient, runtime: Runtime): Disposable {
+export function serveFileSystemRequests(client: BaseLanguageClient, runtime: Runtime): Disposable {
const disposables = [];
disposables.push(client.onRequest(FsReadDirRequest.type, (uriString: string) => {
const uri = Uri.parse(uriString);
diff --git a/extensions/html-language-features/package.json b/extensions/html-language-features/package.json
index e7244d251c0..2f2dc4d1067 100644
--- a/extensions/html-language-features/package.json
+++ b/extensions/html-language-features/package.json
@@ -261,9 +261,9 @@
]
},
"dependencies": {
- "@vscode/extension-telemetry": "0.4.10",
- "vscode-languageclient": "^7.0.0",
- "vscode-nls": "^5.0.0",
+ "@vscode/extension-telemetry": "0.5.1",
+ "vscode-languageclient": "^8.0.1",
+ "vscode-nls": "^5.0.1",
"vscode-uri": "^3.0.3"
},
"devDependencies": {
diff --git a/extensions/html-language-features/server/package.json b/extensions/html-language-features/server/package.json
index 423a395ba96..affcf98e566 100644
--- a/extensions/html-language-features/server/package.json
+++ b/extensions/html-language-features/server/package.json
@@ -9,11 +9,11 @@
},
"main": "./out/node/htmlServerMain",
"dependencies": {
- "vscode-css-languageservice": "^5.4.2",
- "vscode-html-languageservice": "^4.2.5",
- "vscode-languageserver": "^7.0.0",
- "vscode-languageserver-textdocument": "^1.0.3",
- "vscode-nls": "^5.0.0",
+ "vscode-css-languageservice": "^6.0.1",
+ "vscode-html-languageservice": "^5.0.0",
+ "vscode-languageserver": "^8.0.1",
+ "vscode-languageserver-textdocument": "^1.0.4",
+ "vscode-nls": "^5.0.1",
"vscode-uri": "^3.0.3"
},
"devDependencies": {
diff --git a/extensions/html-language-features/server/src/htmlServer.ts b/extensions/html-language-features/server/src/htmlServer.ts
index b3df5fc8e51..319399a038c 100644
--- a/extensions/html-language-features/server/src/htmlServer.ts
+++ b/extensions/html-language-features/server/src/htmlServer.ts
@@ -11,7 +11,7 @@ import {
} from 'vscode-languageserver';
import {
getLanguageModes, LanguageModes, Settings, TextDocument, Position, Diagnostic, WorkspaceFolder, ColorInformation,
- Range, DocumentLink, SymbolInformation, TextDocumentIdentifier
+ Range, DocumentLink, SymbolInformation, TextDocumentIdentifier, isCompletionItemData
} from './modes/languageModes';
import { format } from './modes/formatting';
@@ -129,7 +129,7 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
// After the server has started the client sends an initialize request. The server receives
// in the passed params the rootPath of the workspace plus the client capabilities
connection.onInitialize((params: InitializeParams): InitializeResult => {
- const initializationOptions = params.initializationOptions;
+ const initializationOptions = params.initializationOptions as any || {};
workspaceFolders = (<any>params).workspaceFolders;
if (!Array.isArray(workspaceFolders)) {
@@ -179,14 +179,14 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
scopedSettingsSupport = getClientCapability('workspace.configuration', false);
workspaceFoldersSupport = getClientCapability('workspace.workspaceFolders', false);
foldingRangeLimit = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE);
- formatterMaxNumberOfEdits = params.initializationOptions?.customCapabilities?.rangeFormatting?.editLimit || Number.MAX_VALUE;
+ formatterMaxNumberOfEdits = initializationOptions?.customCapabilities?.rangeFormatting?.editLimit || Number.MAX_VALUE;
const capabilities: ServerCapabilities = {
textDocumentSync: TextDocumentSyncKind.Incremental,
completionProvider: clientSnippetSupport ? { resolveProvider: true, triggerCharacters: ['.', ':', '<', '"', '=', '/'] } : undefined,
hoverProvider: true,
documentHighlightProvider: true,
- documentRangeFormattingProvider: params.initializationOptions?.provideFormatter === true,
- documentFormattingProvider: params.initializationOptions?.provideFormatter === true,
+ documentRangeFormattingProvider: initializationOptions?.provideFormatter === true,
+ documentFormattingProvider: initializationOptions?.provideFormatter === true,
documentLinkProvider: { resolveProvider: false },
documentSymbolProvider: true,
definitionProvider: true,
@@ -226,7 +226,7 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
// The settings have changed. Is send on server activation as well.
connection.onDidChangeConfiguration((change) => {
- globalSettings = change.settings;
+ globalSettings = change.settings as Settings;
documentSettings = {}; // reset all document settings
documents.all().forEach(triggerValidation);
@@ -331,7 +331,7 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
connection.onCompletionResolve((item, token) => {
return runSafe(runtime, async () => {
const data = item.data;
- if (data && data.languageId && data.uri) {
+ if (isCompletionItemData(data)) {
const mode = languageModes.getMode(data.languageId);
const document = documents.get(data.uri);
if (mode && mode.doResolve && document) {
diff --git a/extensions/html-language-features/server/src/modes/cssMode.ts b/extensions/html-language-features/server/src/modes/cssMode.ts
index 9757d99cd88..6bc02acb510 100644
--- a/extensions/html-language-features/server/src/modes/cssMode.ts
+++ b/extensions/html-language-features/server/src/modes/cssMode.ts
@@ -5,7 +5,7 @@
import { LanguageModelCache, getLanguageModelCache } from '../languageModelCache';
import { Stylesheet, LanguageService as CSSLanguageService } from 'vscode-css-languageservice';
-import { LanguageMode, Workspace, Color, TextDocument, Position, Range, CompletionList, DocumentContext } from './languageModes';
+import { LanguageMode, Workspace, Color, TextDocument, Position, Range, CompletionList, DocumentContext, Diagnostic } from './languageModes';
import { HTMLDocumentRegions, CSS_STYLE_RULE } from './embeddedSupport';
export function getCSSMode(cssLanguageService: CSSLanguageService, documentRegions: LanguageModelCache<HTMLDocumentRegions>, workspace: Workspace): LanguageMode {
@@ -18,7 +18,7 @@ export function getCSSMode(cssLanguageService: CSSLanguageService, documentRegio
},
async doValidation(document: TextDocument, settings = workspace.settings) {
let embedded = embeddedCSSDocuments.get(document);
- return cssLanguageService.doValidation(embedded, cssStylesheets.get(embedded), settings && settings.css);
+ return (cssLanguageService.doValidation(embedded, cssStylesheets.get(embedded), settings && settings.css) as Diagnostic[]);
},
async doComplete(document: TextDocument, position: Position, documentContext: DocumentContext, _settings = workspace.settings) {
let embedded = embeddedCSSDocuments.get(document);
diff --git a/extensions/html-language-features/server/src/modes/javascriptMode.ts b/extensions/html-language-features/server/src/modes/javascriptMode.ts
index bbcba5e0f86..7f9e3f1d85a 100644
--- a/extensions/html-language-features/server/src/modes/javascriptMode.ts
+++ b/extensions/html-language-features/server/src/modes/javascriptMode.ts
@@ -8,7 +8,7 @@ import {
SymbolInformation, SymbolKind, CompletionItem, Location, SignatureHelp, SignatureInformation, ParameterInformation,
Definition, TextEdit, TextDocument, Diagnostic, DiagnosticSeverity, Range, CompletionItemKind, Hover,
DocumentHighlight, DocumentHighlightKind, CompletionList, Position, FormattingOptions, FoldingRange, FoldingRangeKind, SelectionRange,
- LanguageMode, Settings, SemanticTokenData, Workspace, DocumentContext
+ LanguageMode, Settings, SemanticTokenData, Workspace, DocumentContext, CompletionItemData, isCompletionItemData
} from './languageModes';
import { getWordAtText, isWhitespaceOnly, repeat } from '../utils/strings';
import { HTMLDocumentRegions } from './embeddedSupport';
@@ -122,6 +122,11 @@ export function getJavaScriptMode(documentRegions: LanguageModelCache<HTMLDocume
return {
isIncomplete: false,
items: completions.entries.map(entry => {
+ const data: CompletionItemData = { // data used for resolving item details (see 'doResolve')
+ languageId,
+ uri: document.uri,
+ offset: offset
+ };
return {
uri: document.uri,
position: position,
@@ -129,23 +134,21 @@ export function getJavaScriptMode(documentRegions: LanguageModelCache<HTMLDocume
sortText: entry.sortText,
kind: convertKind(entry.kind),
textEdit: TextEdit.replace(replaceRange, entry.name),
- data: { // data used for resolving item details (see 'doResolve')
- languageId,
- uri: document.uri,
- offset: offset
- }
+ data
};
})
};
},
async doResolve(document: TextDocument, item: CompletionItem): Promise<CompletionItem> {
- const jsDocument = jsDocuments.get(document);
- const jsLanguageService = await host.getLanguageService(jsDocument);
- let details = jsLanguageService.getCompletionEntryDetails(jsDocument.uri, item.data.offset, item.label, undefined, undefined, undefined, undefined);
- if (details) {
- item.detail = ts.displayPartsToString(details.displayParts);
- item.documentation = ts.displayPartsToString(details.documentation);
- delete item.data;
+ if (isCompletionItemData(item.data)) {
+ const jsDocument = jsDocuments.get(document);
+ const jsLanguageService = await host.getLanguageService(jsDocument);
+ let details = jsLanguageService.getCompletionEntryDetails(jsDocument.uri, item.data.offset, item.label, undefined, undefined, undefined, undefined);
+ if (details) {
+ item.detail = ts.displayPartsToString(details.displayParts);
+ item.documentation = ts.displayPartsToString(details.documentation);
+ delete item.data;
+ }
}
return item;
},
diff --git a/extensions/html-language-features/server/src/modes/languageModes.ts b/extensions/html-language-features/server/src/modes/languageModes.ts
index 3a8b9b797cc..59cc742b2b8 100644
--- a/extensions/html-language-features/server/src/modes/languageModes.ts
+++ b/extensions/html-language-features/server/src/modes/languageModes.ts
@@ -54,6 +54,16 @@ export interface SemanticTokenData {
modifierSet: number;
}
+export type CompletionItemData = {
+ languageId: string;
+ uri: string;
+ offset: number;
+};
+
+export function isCompletionItemData(value: any): value is CompletionItemData {
+ return value && typeof value.languageId === 'string' && typeof value.uri === 'string' && typeof value.offset === 'number';
+}
+
export interface LanguageMode {
getId(): string;
getSelectionRange?: (document: TextDocument, position: Position) => Promise<SelectionRange>;
diff --git a/extensions/html-language-features/server/yarn.lock b/extensions/html-language-features/server/yarn.lock
index a5bfebda600..f086cbf6898 100644
--- a/extensions/html-language-features/server/yarn.lock
+++ b/extensions/html-language-features/server/yarn.lock
@@ -12,65 +12,60 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae"
integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==
-vscode-css-languageservice@^5.4.2:
- version "5.4.2"
- resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.4.2.tgz#69ea74c000bd653dfc8e458a1720d28b9ffa5cfb"
- integrity sha512-DT7+7vfdT2HDNjDoXWtYJ0lVDdeDEdbMNdK4PKqUl2MS8g7PWt7J5G9B6k9lYox8nOfhCEjLnoNC3UKHHCR1lg==
+vscode-css-languageservice@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-6.0.1.tgz#ccf94944e094dcc5833d1b4ac276994b698e9283"
+ integrity sha512-81n/eeYuJwQdvpoy6IK1258PtPbO720fl13FcJ5YQECPyHMFkmld1qKHwPJkyLbLPfboqJPM53ys4xW8v+iBVw==
dependencies:
vscode-languageserver-textdocument "^1.0.4"
- vscode-languageserver-types "^3.16.0"
- vscode-nls "^5.0.0"
+ vscode-languageserver-types "^3.17.1"
+ vscode-nls "^5.0.1"
vscode-uri "^3.0.3"
-vscode-html-languageservice@^4.2.5:
- version "4.2.5"
- resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-4.2.5.tgz#c0cc8ff3d824d16388bbac187e1828749eccf006"
- integrity sha512-dbr10KHabB9EaK8lI0XZW7SqOsTfrNyT3Nuj0GoPi4LjGKUmMiLtsqzfedIzRTzqY+w0FiLdh0/kQrnQ0tLxrw==
+vscode-html-languageservice@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-5.0.0.tgz#c68613f836d7fcff125183d78e6f1f0ff326fa55"
+ integrity sha512-KJG13z54aLszskp3ETf8b1EKDypr2Sf5RUsfR6OXmKqEl2ZUfyIxsWz4gbJWjPzoJZx/bGH0ZXVwxJ1rg8OKRQ==
dependencies:
vscode-languageserver-textdocument "^1.0.4"
- vscode-languageserver-types "^3.16.0"
- vscode-nls "^5.0.0"
+ vscode-languageserver-types "^3.17.1"
+ vscode-nls "^5.0.1"
vscode-uri "^3.0.3"
-vscode-jsonrpc@6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e"
- integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==
+vscode-jsonrpc@8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz#f30b0625ebafa0fb3bc53e934ca47b706445e57e"
+ integrity sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==
-vscode-languageserver-protocol@3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821"
- integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==
+vscode-languageserver-protocol@3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz#e801762c304f740208b6c804a0cf21f2c87509ed"
+ integrity sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==
dependencies:
- vscode-jsonrpc "6.0.0"
- vscode-languageserver-types "3.16.0"
-
-vscode-languageserver-textdocument@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.3.tgz#879f2649bfa5a6e07bc8b392c23ede2dfbf43eff"
- integrity sha512-ynEGytvgTb6HVSUwPJIAZgiHQmPCx8bZ8w5um5Lz+q5DjP0Zj8wTFhQpyg8xaMvefDytw2+HH5yzqS+FhsR28A==
+ vscode-jsonrpc "8.0.1"
+ vscode-languageserver-types "3.17.1"
vscode-languageserver-textdocument@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz#3cd56dd14cec1d09e86c4bb04b09a246cb3df157"
integrity sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==
-vscode-languageserver-types@3.16.0, vscode-languageserver-types@^3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247"
- integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==
+vscode-languageserver-types@3.17.1, vscode-languageserver-types@^3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz#c2d87fa7784f8cac389deb3ff1e2d9a7bef07e16"
+ integrity sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==
-vscode-languageserver@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz#49b068c87cfcca93a356969d20f5d9bdd501c6b0"
- integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==
+vscode-languageserver@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.0.1.tgz#56bd7a01f5c88af075a77f1d220edcb30fc4bdc7"
+ integrity sha512-sn7SjBwWm3OlmLtgg7jbM0wBULppyL60rj8K5HF0ny/MzN+GzPBX1kCvYdybhl7UW63V5V5tRVnyB8iwC73lSQ==
dependencies:
- vscode-languageserver-protocol "3.16.0"
+ vscode-languageserver-protocol "3.17.1"
-vscode-nls@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840"
- integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==
+vscode-nls@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.1.tgz#ba23fc4d4420d25e7f886c8e83cbdcec47aa48b2"
+ integrity sha512-hHQV6iig+M21lTdItKPkJAaWrxALQb/nqpVffakO4knJOh3DrU2SXOMzUzNgo1eADPzu3qSsJY1weCzvR52q9A==
vscode-uri@^3.0.3:
version "3.0.3"
diff --git a/extensions/html-language-features/yarn.lock b/extensions/html-language-features/yarn.lock
index d77421b701c..5157b15d877 100644
--- a/extensions/html-language-features/yarn.lock
+++ b/extensions/html-language-features/yarn.lock
@@ -7,10 +7,10 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae"
integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w==
-"@vscode/extension-telemetry@0.4.10":
- version "0.4.10"
- resolved "https://registry.yarnpkg.com/@vscode/extension-telemetry/-/extension-telemetry-0.4.10.tgz#be960c05bdcbea0933866346cf244acad6cac910"
- integrity sha512-XgyUoWWRQExTmd9DynIIUQo1NPex/zIeetdUAXeBjVuW9ioojM1TcDaSqOa/5QLC7lx+oEXwSU1r0XSBgzyz6w==
+"@vscode/extension-telemetry@0.5.1":
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/@vscode/extension-telemetry/-/extension-telemetry-0.5.1.tgz#20150976629663b3d33799a4ad25944a1535f7db"
+ integrity sha512-cvFq8drxdLRF8KN72WcV4lTEa9GqDiRwy9EbnYuoSCD9Jdk8zHFF49MmACC1qs4R9Ko/C1uMOmeLJmVi8EA0rQ==
balanced-match@^1.0.0:
version "1.0.0"
@@ -44,44 +44,44 @@ minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
-semver@^7.3.4:
- version "7.3.4"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
- integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
+semver@^7.3.5:
+ version "7.3.7"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
+ integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
dependencies:
lru-cache "^6.0.0"
-vscode-jsonrpc@6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e"
- integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==
+vscode-jsonrpc@8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz#f30b0625ebafa0fb3bc53e934ca47b706445e57e"
+ integrity sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==
-vscode-languageclient@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz#b505c22c21ffcf96e167799757fca07a6bad0fb2"
- integrity sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==
+vscode-languageclient@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-8.0.1.tgz#bf5535c4463a78daeaca0bcb4f5868aec86bb301"
+ integrity sha512-9XoE+HJfaWvu7Y75H3VmLo5WLCtsbxEgEhrLPqwt7eyoR49lUIyyrjb98Yfa50JCMqF2cePJAEVI6oe2o1sIhw==
dependencies:
minimatch "^3.0.4"
- semver "^7.3.4"
- vscode-languageserver-protocol "3.16.0"
+ semver "^7.3.5"
+ vscode-languageserver-protocol "3.17.1"
-vscode-languageserver-protocol@3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821"
- integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==
+vscode-languageserver-protocol@3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz#e801762c304f740208b6c804a0cf21f2c87509ed"
+ integrity sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==
dependencies:
- vscode-jsonrpc "6.0.0"
- vscode-languageserver-types "3.16.0"
-
-vscode-languageserver-types@3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247"
- integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==
-
-vscode-nls@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840"
- integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==
+ vscode-jsonrpc "8.0.1"
+ vscode-languageserver-types "3.17.1"
+
+vscode-languageserver-types@3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz#c2d87fa7784f8cac389deb3ff1e2d9a7bef07e16"
+ integrity sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==
+
+vscode-nls@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.1.tgz#ba23fc4d4420d25e7f886c8e83cbdcec47aa48b2"
+ integrity sha512-hHQV6iig+M21lTdItKPkJAaWrxALQb/nqpVffakO4knJOh3DrU2SXOMzUzNgo1eADPzu3qSsJY1weCzvR52q9A==
vscode-uri@^3.0.3:
version "3.0.3"
diff --git a/extensions/json-language-features/client/src/browser/jsonClientMain.ts b/extensions/json-language-features/client/src/browser/jsonClientMain.ts
index 9eb390b545c..e1fae6ffeb4 100644
--- a/extensions/json-language-features/client/src/browser/jsonClientMain.ts
+++ b/extensions/json-language-features/client/src/browser/jsonClientMain.ts
@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { ExtensionContext, Uri } from 'vscode';
-import { LanguageClientOptions } from 'vscode-languageclient';
+import { BaseLanguageClient, LanguageClientOptions } from 'vscode-languageclient';
import { startClient, LanguageClientConstructor, SchemaRequestService } from '../jsonClient';
import { LanguageClient } from 'vscode-languageclient/browser';
@@ -14,8 +14,10 @@ declare const Worker: {
declare function fetch(uri: string, options: any): any;
+let client: BaseLanguageClient | undefined;
+
// this method is called when vs code is activated
-export function activate(context: ExtensionContext) {
+export async function activate(context: ExtensionContext) {
const serverMain = Uri.joinPath(context.extensionUri, 'server/dist/browser/jsonServerMain.js');
try {
const worker = new Worker(serverMain.toString());
@@ -32,9 +34,16 @@ export function activate(context: ExtensionContext) {
}
};
- startClient(context, newLanguageClient, { schemaRequests });
+ client = await startClient(context, newLanguageClient, { schemaRequests });
} catch (e) {
console.log(e);
}
}
+
+export async function deactivate(): Promise<void> {
+ if (client) {
+ await client.stop();
+ client = undefined;
+ }
+}
diff --git a/extensions/json-language-features/client/src/jsonClient.ts b/extensions/json-language-features/client/src/jsonClient.ts
index 5246257adc8..60225af8cef 100644
--- a/extensions/json-language-features/client/src/jsonClient.ts
+++ b/extensions/json-language-features/client/src/jsonClient.ts
@@ -16,9 +16,10 @@ import {
import {
LanguageClientOptions, RequestType, NotificationType,
DidChangeConfigurationNotification, HandleDiagnosticsSignature, ResponseError, DocumentRangeFormattingParams,
- DocumentRangeFormattingRequest, ProvideCompletionItemsSignature, ProvideHoverSignature, CommonLanguageClient
+ DocumentRangeFormattingRequest, ProvideCompletionItemsSignature, ProvideHoverSignature, BaseLanguageClient
} from 'vscode-languageclient';
+
import { hash } from './utils/hash';
import { createLanguageStatusItem } from './languageStatus';
@@ -56,7 +57,7 @@ namespace ResultLimitReachedNotification {
export const type: NotificationType<string> = new NotificationType('json/resultLimitReached');
}
-interface Settings {
+type Settings = {
json?: {
schemas?: JSONSchemaSettings[];
format?: { enable?: boolean };
@@ -67,13 +68,13 @@ interface Settings {
proxy?: string;
proxyStrictSSL?: boolean;
};
-}
+};
-export interface JSONSchemaSettings {
+export type JSONSchemaSettings = {
fileMatch?: string[];
url?: string;
schema?: any;
-}
+};
namespace SettingIds {
export const enableFormatter = 'json.format.enable';
@@ -94,7 +95,7 @@ export interface TelemetryReporter {
}): void;
}
-export type LanguageClientConstructor = (name: string, description: string, clientOptions: LanguageClientOptions) => CommonLanguageClient;
+export type LanguageClientConstructor = (name: string, description: string, clientOptions: LanguageClientOptions) => BaseLanguageClient;
export interface Runtime {
schemaRequests: SchemaRequestService;
@@ -108,7 +109,7 @@ export interface SchemaRequestService {
export const languageServerDescription = localize('jsonserver.name', 'JSON Language Server');
-export function startClient(context: ExtensionContext, newLanguageClient: LanguageClientConstructor, runtime: Runtime) {
+export async function startClient(context: ExtensionContext, newLanguageClient: LanguageClientConstructor, runtime: Runtime): Promise<BaseLanguageClient> {
const toDispose = context.subscriptions;
@@ -218,178 +219,177 @@ export function startClient(context: ExtensionContext, newLanguageClient: Langua
const client = newLanguageClient('json', languageServerDescription, clientOptions);
client.registerProposedFeatures();
- const disposable = client.start();
- toDispose.push(disposable);
- client.onReady().then(() => {
- isClientReady = true;
-
- const schemaDocuments: { [uri: string]: boolean } = {};
+ const schemaDocuments: { [uri: string]: boolean } = {};
- // handle content request
- client.onRequest(VSCodeContentRequest.type, (uriPath: string) => {
- const uri = Uri.parse(uriPath);
- if (uri.scheme === 'untitled') {
- return Promise.reject(new ResponseError(3, localize('untitled.schema', 'Unable to load {0}', uri.toString())));
- }
- if (uri.scheme !== 'http' && uri.scheme !== 'https') {
- return workspace.openTextDocument(uri).then(doc => {
- schemaDocuments[uri.toString()] = true;
- return doc.getText();
- }, error => {
- return Promise.reject(new ResponseError(2, error.toString()));
- });
- } else if (schemaDownloadEnabled) {
- if (runtime.telemetry && uri.authority === 'schema.management.azure.com') {
- /* __GDPR__
- "json.schema" : {
- "owner": "aeschli",
- "comment": "Measure the use of the Azure resource manager schemas",
- "schemaURL" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "The azure schema URL that was requested." }
- }
- */
- runtime.telemetry.sendTelemetryEvent('json.schema', { schemaURL: uriPath });
- }
- return runtime.schemaRequests.getContent(uriPath).catch(e => {
- return Promise.reject(new ResponseError(4, e.toString()));
- });
- } else {
- return Promise.reject(new ResponseError(1, localize('schemaDownloadDisabled', 'Downloading schemas is disabled through setting \'{0}\'', SettingIds.enableSchemaDownload)));
+ // handle content request
+ client.onRequest(VSCodeContentRequest.type, (uriPath: string) => {
+ const uri = Uri.parse(uriPath);
+ if (uri.scheme === 'untitled') {
+ return Promise.reject(new ResponseError(3, localize('untitled.schema', 'Unable to load {0}', uri.toString())));
+ }
+ if (uri.scheme !== 'http' && uri.scheme !== 'https') {
+ return workspace.openTextDocument(uri).then(doc => {
+ schemaDocuments[uri.toString()] = true;
+ return doc.getText();
+ }, error => {
+ return Promise.reject(new ResponseError(2, error.toString()));
+ });
+ } else if (schemaDownloadEnabled) {
+ if (runtime.telemetry && uri.authority === 'schema.management.azure.com') {
+ /* __GDPR__
+ "json.schema" : {
+ "owner": "aeschli",
+ "comment": "Measure the use of the Azure resource manager schemas",
+ "schemaURL" : { "classification": "SystemMetaData", "purpose": "FeatureInsight", "comment": "The azure schema URL that was requested." }
+ }
+ */
+ runtime.telemetry.sendTelemetryEvent('json.schema', { schemaURL: uriPath });
}
- });
+ return runtime.schemaRequests.getContent(uriPath).catch(e => {
+ return Promise.reject(new ResponseError(4, e.toString()));
+ });
+ } else {
+ return Promise.reject(new ResponseError(1, localize('schemaDownloadDisabled', 'Downloading schemas is disabled through setting \'{0}\'', SettingIds.enableSchemaDownload)));
+ }
+ });
- const handleContentChange = (uriString: string) => {
- if (schemaDocuments[uriString]) {
- client.sendNotification(SchemaContentChangeNotification.type, uriString);
- return true;
- }
- return false;
- };
- const handleActiveEditorChange = (activeEditor?: TextEditor) => {
- if (!activeEditor) {
- return;
- }
+ await client.start();
- const activeDocUri = activeEditor.document.uri.toString();
+ isClientReady = true;
- if (activeDocUri && fileSchemaErrors.has(activeDocUri)) {
- schemaResolutionErrorStatusBarItem.show();
- } else {
- schemaResolutionErrorStatusBarItem.hide();
- }
- };
+ const handleContentChange = (uriString: string) => {
+ if (schemaDocuments[uriString]) {
+ client.sendNotification(SchemaContentChangeNotification.type, uriString);
+ return true;
+ }
+ return false;
+ };
+ const handleActiveEditorChange = (activeEditor?: TextEditor) => {
+ if (!activeEditor) {
+ return;
+ }
- toDispose.push(workspace.onDidChangeTextDocument(e => handleContentChange(e.document.uri.toString())));
- toDispose.push(workspace.onDidCloseTextDocument(d => {
- const uriString = d.uri.toString();
- if (handleContentChange(uriString)) {
- delete schemaDocuments[uriString];
- }
- fileSchemaErrors.delete(uriString);
- }));
- toDispose.push(window.onDidChangeActiveTextEditor(handleActiveEditorChange));
-
- const handleRetryResolveSchemaCommand = () => {
- if (window.activeTextEditor) {
- schemaResolutionErrorStatusBarItem.text = '$(watch)';
- const activeDocUri = window.activeTextEditor.document.uri.toString();
- client.sendRequest(ForceValidateRequest.type, activeDocUri).then((diagnostics) => {
- const schemaErrorIndex = diagnostics.findIndex(isSchemaResolveError);
- if (schemaErrorIndex !== -1) {
- // Show schema resolution errors in status bar only; ref: #51032
- const schemaResolveDiagnostic = diagnostics[schemaErrorIndex];
- fileSchemaErrors.set(activeDocUri, schemaResolveDiagnostic.message);
- } else {
- schemaResolutionErrorStatusBarItem.hide();
- }
- schemaResolutionErrorStatusBarItem.text = '$(alert)';
- });
- }
- };
+ const activeDocUri = activeEditor.document.uri.toString();
+
+ if (activeDocUri && fileSchemaErrors.has(activeDocUri)) {
+ schemaResolutionErrorStatusBarItem.show();
+ } else {
+ schemaResolutionErrorStatusBarItem.hide();
+ }
+ };
- toDispose.push(commands.registerCommand('_json.retryResolveSchema', handleRetryResolveSchemaCommand));
+ toDispose.push(workspace.onDidChangeTextDocument(e => handleContentChange(e.document.uri.toString())));
+ toDispose.push(workspace.onDidCloseTextDocument(d => {
+ const uriString = d.uri.toString();
+ if (handleContentChange(uriString)) {
+ delete schemaDocuments[uriString];
+ }
+ fileSchemaErrors.delete(uriString);
+ }));
+ toDispose.push(window.onDidChangeActiveTextEditor(handleActiveEditorChange));
+ const handleRetryResolveSchemaCommand = () => {
+ if (window.activeTextEditor) {
+ schemaResolutionErrorStatusBarItem.text = '$(watch)';
+ const activeDocUri = window.activeTextEditor.document.uri.toString();
+ client.sendRequest(ForceValidateRequest.type, activeDocUri).then((diagnostics) => {
+ const schemaErrorIndex = diagnostics.findIndex(isSchemaResolveError);
+ if (schemaErrorIndex !== -1) {
+ // Show schema resolution errors in status bar only; ref: #51032
+ const schemaResolveDiagnostic = diagnostics[schemaErrorIndex];
+ fileSchemaErrors.set(activeDocUri, schemaResolveDiagnostic.message);
+ } else {
+ schemaResolutionErrorStatusBarItem.hide();
+ }
+ schemaResolutionErrorStatusBarItem.text = '$(alert)';
+ });
+ }
+ };
+
+ toDispose.push(commands.registerCommand('_json.retryResolveSchema', handleRetryResolveSchemaCommand));
+
+ client.sendNotification(SchemaAssociationNotification.type, getSchemaAssociations(context));
+
+ toDispose.push(extensions.onDidChange(_ => {
client.sendNotification(SchemaAssociationNotification.type, getSchemaAssociations(context));
+ }));
- toDispose.push(extensions.onDidChange(_ => {
- client.sendNotification(SchemaAssociationNotification.type, getSchemaAssociations(context));
- }));
+ // manually register / deregister format provider based on the `json.format.enable` setting avoiding issues with late registration. See #71652.
+ updateFormatterRegistration();
+ toDispose.push({ dispose: () => rangeFormatting && rangeFormatting.dispose() });
- // manually register / deregister format provider based on the `json.format.enable` setting avoiding issues with late registration. See #71652.
- updateFormatterRegistration();
- toDispose.push({ dispose: () => rangeFormatting && rangeFormatting.dispose() });
+ updateSchemaDownloadSetting();
- updateSchemaDownloadSetting();
+ toDispose.push(workspace.onDidChangeConfiguration(e => {
+ if (e.affectsConfiguration(SettingIds.enableFormatter)) {
+ updateFormatterRegistration();
+ } else if (e.affectsConfiguration(SettingIds.enableSchemaDownload)) {
+ updateSchemaDownloadSetting();
+ }
+ }));
- toDispose.push(workspace.onDidChangeConfiguration(e => {
- if (e.affectsConfiguration(SettingIds.enableFormatter)) {
- updateFormatterRegistration();
- } else if (e.affectsConfiguration(SettingIds.enableSchemaDownload)) {
- updateSchemaDownloadSetting();
+ client.onNotification(ResultLimitReachedNotification.type, async message => {
+ const shouldPrompt = context.globalState.get<boolean>(StorageIds.maxItemsExceededInformation) !== false;
+ if (shouldPrompt) {
+ const ok = localize('ok', "OK");
+ const openSettings = localize('goToSetting', 'Open Settings');
+ const neverAgain = localize('yes never again', "Don't Show Again");
+ const pick = await window.showInformationMessage(`${message}\n${localize('configureLimit', 'Use setting \'{0}\' to configure the limit.', SettingIds.maxItemsComputed)}`, ok, openSettings, neverAgain);
+ if (pick === neverAgain) {
+ await context.globalState.update(StorageIds.maxItemsExceededInformation, false);
+ } else if (pick === openSettings) {
+ await commands.executeCommand('workbench.action.openSettings', SettingIds.maxItemsComputed);
}
- }));
-
- client.onNotification(ResultLimitReachedNotification.type, async message => {
- const shouldPrompt = context.globalState.get<boolean>(StorageIds.maxItemsExceededInformation) !== false;
- if (shouldPrompt) {
- const ok = localize('ok', "OK");
- const openSettings = localize('goToSetting', 'Open Settings');
- const neverAgain = localize('yes never again', "Don't Show Again");
- const pick = await window.showInformationMessage(`${message}\n${localize('configureLimit', 'Use setting \'{0}\' to configure the limit.', SettingIds.maxItemsComputed)}`, ok, openSettings, neverAgain);
- if (pick === neverAgain) {
- await context.globalState.update(StorageIds.maxItemsExceededInformation, false);
- } else if (pick === openSettings) {
- await commands.executeCommand('workbench.action.openSettings', SettingIds.maxItemsComputed);
+ }
+ });
+
+ toDispose.push(createLanguageStatusItem(documentSelector, (uri: string) => client.sendRequest(LanguageStatusRequest.type, uri)));
+
+ function updateFormatterRegistration() {
+ const formatEnabled = workspace.getConfiguration().get(SettingIds.enableFormatter);
+ if (!formatEnabled && rangeFormatting) {
+ rangeFormatting.dispose();
+ rangeFormatting = undefined;
+ } else if (formatEnabled && !rangeFormatting) {
+ rangeFormatting = languages.registerDocumentRangeFormattingEditProvider(documentSelector, {
+ provideDocumentRangeFormattingEdits(document: TextDocument, range: Range, options: FormattingOptions, token: CancellationToken): ProviderResult<TextEdit[]> {
+ const filesConfig = workspace.getConfiguration('files', document);
+ const fileFormattingOptions = {
+ trimTrailingWhitespace: filesConfig.get<boolean>('trimTrailingWhitespace'),
+ trimFinalNewlines: filesConfig.get<boolean>('trimFinalNewlines'),
+ insertFinalNewline: filesConfig.get<boolean>('insertFinalNewline'),
+ };
+ const params: DocumentRangeFormattingParams = {
+ textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
+ range: client.code2ProtocolConverter.asRange(range),
+ options: client.code2ProtocolConverter.asFormattingOptions(options, fileFormattingOptions)
+ };
+
+ return client.sendRequest(DocumentRangeFormattingRequest.type, params, token).then(
+ client.protocol2CodeConverter.asTextEdits,
+ (error) => {
+ client.handleFailedRequest(DocumentRangeFormattingRequest.type, undefined, error, []);
+ return Promise.resolve([]);
+ }
+ );
}
- }
- });
-
- toDispose.push(createLanguageStatusItem(documentSelector, (uri: string) => client.sendRequest(LanguageStatusRequest.type, uri)));
-
- function updateFormatterRegistration() {
- const formatEnabled = workspace.getConfiguration().get(SettingIds.enableFormatter);
- if (!formatEnabled && rangeFormatting) {
- rangeFormatting.dispose();
- rangeFormatting = undefined;
- } else if (formatEnabled && !rangeFormatting) {
- rangeFormatting = languages.registerDocumentRangeFormattingEditProvider(documentSelector, {
- provideDocumentRangeFormattingEdits(document: TextDocument, range: Range, options: FormattingOptions, token: CancellationToken): ProviderResult<TextEdit[]> {
- const filesConfig = workspace.getConfiguration('files', document);
- const fileFormattingOptions = {
- trimTrailingWhitespace: filesConfig.get<boolean>('trimTrailingWhitespace'),
- trimFinalNewlines: filesConfig.get<boolean>('trimFinalNewlines'),
- insertFinalNewline: filesConfig.get<boolean>('insertFinalNewline'),
- };
- const params: DocumentRangeFormattingParams = {
- textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document),
- range: client.code2ProtocolConverter.asRange(range),
- options: client.code2ProtocolConverter.asFormattingOptions(options, fileFormattingOptions)
- };
-
- return client.sendRequest(DocumentRangeFormattingRequest.type, params, token).then(
- client.protocol2CodeConverter.asTextEdits,
- (error) => {
- client.handleFailedRequest(DocumentRangeFormattingRequest.type, error, []);
- return Promise.resolve([]);
- }
- );
- }
- });
- }
+ });
}
+ }
- function updateSchemaDownloadSetting() {
- schemaDownloadEnabled = workspace.getConfiguration().get(SettingIds.enableSchemaDownload) !== false;
- if (schemaDownloadEnabled) {
- schemaResolutionErrorStatusBarItem.tooltip = localize('json.schemaResolutionErrorMessage', 'Unable to resolve schema. Click to retry.');
- schemaResolutionErrorStatusBarItem.command = '_json.retryResolveSchema';
- handleRetryResolveSchemaCommand();
- } else {
- schemaResolutionErrorStatusBarItem.tooltip = localize('json.schemaResolutionDisabledMessage', 'Downloading schemas is disabled. Click to configure.');
- schemaResolutionErrorStatusBarItem.command = { command: 'workbench.action.openSettings', arguments: [SettingIds.enableSchemaDownload], title: '' };
- }
+ function updateSchemaDownloadSetting() {
+ schemaDownloadEnabled = workspace.getConfiguration().get(SettingIds.enableSchemaDownload) !== false;
+ if (schemaDownloadEnabled) {
+ schemaResolutionErrorStatusBarItem.tooltip = localize('json.schemaResolutionErrorMessage', 'Unable to resolve schema. Click to retry.');
+ schemaResolutionErrorStatusBarItem.command = '_json.retryResolveSchema';
+ handleRetryResolveSchemaCommand();
+ } else {
+ schemaResolutionErrorStatusBarItem.tooltip = localize('json.schemaResolutionDisabledMessage', 'Downloading schemas is disabled. Click to configure.');
+ schemaResolutionErrorStatusBarItem.command = { command: 'workbench.action.openSettings', arguments: [SettingIds.enableSchemaDownload], title: '' };
}
+ }
- });
+ return client;
}
function getSchemaAssociations(_context: ExtensionContext): ISchemaAssociation[] {
diff --git a/extensions/json-language-features/client/src/node/jsonClientMain.ts b/extensions/json-language-features/client/src/node/jsonClientMain.ts
index 9809074a5a9..752abe59a9f 100644
--- a/extensions/json-language-features/client/src/node/jsonClientMain.ts
+++ b/extensions/json-language-features/client/src/node/jsonClientMain.ts
@@ -5,7 +5,7 @@
import { ExtensionContext, OutputChannel, window, workspace } from 'vscode';
import { startClient, LanguageClientConstructor, SchemaRequestService, languageServerDescription } from '../jsonClient';
-import { ServerOptions, TransportKind, LanguageClientOptions, LanguageClient } from 'vscode-languageclient/node';
+import { ServerOptions, TransportKind, LanguageClientOptions, LanguageClient, BaseLanguageClient } from 'vscode-languageclient/node';
import { promises as fs } from 'fs';
import * as path from 'path';
@@ -15,6 +15,7 @@ import TelemetryReporter from '@vscode/extension-telemetry';
import { JSONSchemaCache } from './schemaCache';
let telemetry: TelemetryReporter | undefined;
+let client: BaseLanguageClient | undefined;
// this method is called when vs code is activated
export async function activate(context: ExtensionContext) {
@@ -45,11 +46,15 @@ export async function activate(context: ExtensionContext) {
const schemaRequests = await getSchemaRequestService(context, log);
- startClient(context, newLanguageClient, { schemaRequests, telemetry });
+ client = await startClient(context, newLanguageClient, { schemaRequests, telemetry });
}
-export function deactivate(): Promise<any> {
- return telemetry ? telemetry.dispose() : Promise.resolve(null);
+export async function deactivate(): Promise<any> {
+ if (client) {
+ await client.stop();
+ client = undefined;
+ }
+ telemetry?.dispose();
}
interface IPackageInfo {
diff --git a/extensions/json-language-features/package.json b/extensions/json-language-features/package.json
index 4941fced265..1fc6753efbb 100644
--- a/extensions/json-language-features/package.json
+++ b/extensions/json-language-features/package.json
@@ -149,8 +149,8 @@
"dependencies": {
"@vscode/extension-telemetry": "0.5.1",
"request-light": "^0.5.8",
- "vscode-languageclient": "^7.0.0",
- "vscode-nls": "^5.0.0"
+ "vscode-languageclient": "^8.0.1",
+ "vscode-nls": "^5.0.1"
},
"devDependencies": {
"@types/node": "16.x"
diff --git a/extensions/json-language-features/server/package.json b/extensions/json-language-features/server/package.json
index cd04f24c3ab..a60bc177dc1 100644
--- a/extensions/json-language-features/server/package.json
+++ b/extensions/json-language-features/server/package.json
@@ -14,8 +14,8 @@
"dependencies": {
"jsonc-parser": "^3.0.0",
"request-light": "^0.5.8",
- "vscode-json-languageservice": "^4.2.1",
- "vscode-languageserver": "^7.0.0",
+ "vscode-json-languageservice": "^5.0.0",
+ "vscode-languageserver": "^8.0.1",
"vscode-uri": "^3.0.3"
},
"devDependencies": {
diff --git a/extensions/json-language-features/server/src/jsonServer.ts b/extensions/json-language-features/server/src/jsonServer.ts
index e105859371f..b818bcefbf2 100644
--- a/extensions/json-language-features/server/src/jsonServer.ts
+++ b/extensions/json-language-features/server/src/jsonServer.ts
@@ -6,11 +6,11 @@
import {
Connection,
TextDocuments, InitializeParams, InitializeResult, NotificationType, RequestType,
- DocumentRangeFormattingRequest, Disposable, ServerCapabilities, TextDocumentSyncKind, TextEdit, DocumentFormattingRequest, TextDocumentIdentifier, FormattingOptions
+ DocumentRangeFormattingRequest, Disposable, ServerCapabilities, TextDocumentSyncKind, TextEdit, DocumentFormattingRequest, TextDocumentIdentifier, FormattingOptions, Diagnostic
} from 'vscode-languageserver';
import { formatError, runSafe, runSafeAsync } from './utils/runner';
-import { TextDocument, JSONDocument, JSONSchema, getLanguageService, DocumentLanguageSettings, SchemaConfiguration, ClientCapabilities, Diagnostic, Range, Position } from 'vscode-json-languageservice';
+import { TextDocument, JSONDocument, JSONSchema, getLanguageService, DocumentLanguageSettings, SchemaConfiguration, ClientCapabilities, Range, Position } from 'vscode-json-languageservice';
import { getLanguageModelCache } from './languageModelCache';
import { Utils, URI } from 'vscode-uri';
@@ -117,7 +117,9 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
// in the passed params the rootPath of the workspace plus the client capabilities.
connection.onInitialize((params: InitializeParams): InitializeResult => {
- const handledProtocols = params.initializationOptions?.handledSchemaProtocols;
+ const initializationOptions = params.initializationOptions as any || {};
+
+ const handledProtocols = initializationOptions?.handledSchemaProtocols;
languageService = getLanguageService({
schemaRequestService: getSchemaRequestService(handledProtocols),
@@ -138,11 +140,13 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
return c;
}
+
+
clientSnippetSupport = getClientCapability('textDocument.completion.completionItem.snippetSupport', false);
- dynamicFormatterRegistration = getClientCapability('textDocument.rangeFormatting.dynamicRegistration', false) && (typeof params.initializationOptions?.provideFormatter !== 'boolean');
+ dynamicFormatterRegistration = getClientCapability('textDocument.rangeFormatting.dynamicRegistration', false) && (typeof initializationOptions.provideFormatter !== 'boolean');
foldingRangeLimitDefault = getClientCapability('textDocument.foldingRange.rangeLimit', Number.MAX_VALUE);
hierarchicalDocumentSymbolSupport = getClientCapability('textDocument.documentSymbol.hierarchicalDocumentSymbolSupport', false);
- formatterMaxNumberOfEdits = params.initializationOptions?.customCapabilities?.rangeFormatting?.editLimit || Number.MAX_VALUE;
+ formatterMaxNumberOfEdits = initializationOptions.customCapabilities?.rangeFormatting?.editLimit || Number.MAX_VALUE;
const capabilities: ServerCapabilities = {
textDocumentSync: TextDocumentSyncKind.Incremental,
completionProvider: clientSnippetSupport ? {
@@ -151,8 +155,8 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
} : undefined,
hoverProvider: true,
documentSymbolProvider: true,
- documentRangeFormattingProvider: params.initializationOptions?.provideFormatter === true,
- documentFormattingProvider: params.initializationOptions?.provideFormatter === true,
+ documentRangeFormattingProvider: initializationOptions.provideFormatter === true,
+ documentFormattingProvider: initializationOptions.provideFormatter === true,
colorProvider: {},
foldingRangeProvider: true,
selectionRangeProvider: true,
@@ -403,7 +407,7 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment)
runtime.timer.setImmediate(() => {
const currDocument = documents.get(textDocument.uri);
if (currDocument && currDocument.version === version) {
- respond(diagnostics); // Send the computed diagnostics to VSCode.
+ respond(diagnostics as Diagnostic[]); // Send the computed diagnostics to VSCode.
}
});
}, error => {
diff --git a/extensions/json-language-features/server/yarn.lock b/extensions/json-language-features/server/yarn.lock
index 5cd1cf5f480..2e74a77e9d3 100644
--- a/extensions/json-language-features/server/yarn.lock
+++ b/extensions/json-language-features/server/yarn.lock
@@ -22,51 +22,51 @@ request-light@^0.5.8:
resolved "https://registry.yarnpkg.com/request-light/-/request-light-0.5.8.tgz#8bf73a07242b9e7b601fac2fa5dc22a094abcc27"
integrity sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==
-vscode-json-languageservice@^4.2.1:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-4.2.1.tgz#94b6f471ece193bf4a1ef37f6ab5cce86d50a8b4"
- integrity sha512-xGmv9QIWs2H8obGbWg+sIPI/3/pFgj/5OWBhNzs00BkYQ9UaB2F6JJaGB/2/YOZJ3BvLXQTC4Q7muqU25QgAhA==
+vscode-json-languageservice@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-5.0.0.tgz#465d76cfe5dfeed4c3d5a2123b50e3f115bb7f78"
+ integrity sha512-1/+1TJBRFrfCNizmrW0fbIvguKzzO+4ehlqWCCnF7ioSACUGHrYop4ANb+eRnFaCP6fi3+i+llJC5Y5yAvmL6w==
dependencies:
jsonc-parser "^3.0.0"
- vscode-languageserver-textdocument "^1.0.3"
- vscode-languageserver-types "^3.16.0"
- vscode-nls "^5.0.0"
+ vscode-languageserver-textdocument "^1.0.4"
+ vscode-languageserver-types "^3.17.1"
+ vscode-nls "^5.0.1"
vscode-uri "^3.0.3"
-vscode-jsonrpc@6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e"
- integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==
+vscode-jsonrpc@8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz#f30b0625ebafa0fb3bc53e934ca47b706445e57e"
+ integrity sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==
-vscode-languageserver-protocol@3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821"
- integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==
+vscode-languageserver-protocol@3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz#e801762c304f740208b6c804a0cf21f2c87509ed"
+ integrity sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==
dependencies:
- vscode-jsonrpc "6.0.0"
- vscode-languageserver-types "3.16.0"
+ vscode-jsonrpc "8.0.1"
+ vscode-languageserver-types "3.17.1"
-vscode-languageserver-textdocument@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.3.tgz#879f2649bfa5a6e07bc8b392c23ede2dfbf43eff"
- integrity sha512-ynEGytvgTb6HVSUwPJIAZgiHQmPCx8bZ8w5um5Lz+q5DjP0Zj8wTFhQpyg8xaMvefDytw2+HH5yzqS+FhsR28A==
+vscode-languageserver-textdocument@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz#3cd56dd14cec1d09e86c4bb04b09a246cb3df157"
+ integrity sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==
-vscode-languageserver-types@3.16.0, vscode-languageserver-types@^3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247"
- integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==
+vscode-languageserver-types@3.17.1, vscode-languageserver-types@^3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz#c2d87fa7784f8cac389deb3ff1e2d9a7bef07e16"
+ integrity sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==
-vscode-languageserver@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz#49b068c87cfcca93a356969d20f5d9bdd501c6b0"
- integrity sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==
+vscode-languageserver@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-8.0.1.tgz#56bd7a01f5c88af075a77f1d220edcb30fc4bdc7"
+ integrity sha512-sn7SjBwWm3OlmLtgg7jbM0wBULppyL60rj8K5HF0ny/MzN+GzPBX1kCvYdybhl7UW63V5V5tRVnyB8iwC73lSQ==
dependencies:
- vscode-languageserver-protocol "3.16.0"
+ vscode-languageserver-protocol "3.17.1"
-vscode-nls@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840"
- integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==
+vscode-nls@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.1.tgz#ba23fc4d4420d25e7f886c8e83cbdcec47aa48b2"
+ integrity sha512-hHQV6iig+M21lTdItKPkJAaWrxALQb/nqpVffakO4knJOh3DrU2SXOMzUzNgo1eADPzu3qSsJY1weCzvR52q9A==
vscode-uri@^3.0.3:
version "3.0.3"
diff --git a/extensions/json-language-features/yarn.lock b/extensions/json-language-features/yarn.lock
index 7e56398f062..3b6ad62624a 100644
--- a/extensions/json-language-features/yarn.lock
+++ b/extensions/json-language-features/yarn.lock
@@ -49,44 +49,44 @@ request-light@^0.5.8:
resolved "https://registry.yarnpkg.com/request-light/-/request-light-0.5.8.tgz#8bf73a07242b9e7b601fac2fa5dc22a094abcc27"
integrity sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==
-semver@^7.3.4:
- version "7.3.4"
- resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
- integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
+semver@^7.3.5:
+ version "7.3.7"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
+ integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
dependencies:
lru-cache "^6.0.0"
-vscode-jsonrpc@6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz#108bdb09b4400705176b957ceca9e0880e9b6d4e"
- integrity sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==
+vscode-jsonrpc@8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-8.0.1.tgz#f30b0625ebafa0fb3bc53e934ca47b706445e57e"
+ integrity sha512-N/WKvghIajmEvXpatSzvTvOIz61ZSmOSa4BRA4pTLi+1+jozquQKP/MkaylP9iB68k73Oua1feLQvH3xQuigiQ==
-vscode-languageclient@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz#b505c22c21ffcf96e167799757fca07a6bad0fb2"
- integrity sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==
+vscode-languageclient@^8.0.1:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageclient/-/vscode-languageclient-8.0.1.tgz#bf5535c4463a78daeaca0bcb4f5868aec86bb301"
+ integrity sha512-9XoE+HJfaWvu7Y75H3VmLo5WLCtsbxEgEhrLPqwt7eyoR49lUIyyrjb98Yfa50JCMqF2cePJAEVI6oe2o1sIhw==
dependencies:
minimatch "^3.0.4"
- semver "^7.3.4"
- vscode-languageserver-protocol "3.16.0"
+ semver "^7.3.5"
+ vscode-languageserver-protocol "3.17.1"
-vscode-languageserver-protocol@3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz#34135b61a9091db972188a07d337406a3cdbe821"
- integrity sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==
+vscode-languageserver-protocol@3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.1.tgz#e801762c304f740208b6c804a0cf21f2c87509ed"
+ integrity sha512-BNlAYgQoYwlSgDLJhSG+DeA8G1JyECqRzM2YO6tMmMji3Ad9Mw6AW7vnZMti90qlAKb0LqAlJfSVGEdqMMNzKg==
dependencies:
- vscode-jsonrpc "6.0.0"
- vscode-languageserver-types "3.16.0"
-
-vscode-languageserver-types@3.16.0:
- version "3.16.0"
- resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247"
- integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==
-
-vscode-nls@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840"
- integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA==
+ vscode-jsonrpc "8.0.1"
+ vscode-languageserver-types "3.17.1"
+
+vscode-languageserver-types@3.17.1:
+ version "3.17.1"
+ resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.17.1.tgz#c2d87fa7784f8cac389deb3ff1e2d9a7bef07e16"
+ integrity sha512-K3HqVRPElLZVVPtMeKlsyL9aK0GxGQpvtAUTfX4k7+iJ4mc1M+JM+zQwkgGy2LzY0f0IAafe8MKqIkJrxfGGjQ==
+
+vscode-nls@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.1.tgz#ba23fc4d4420d25e7f886c8e83cbdcec47aa48b2"
+ integrity sha512-hHQV6iig+M21lTdItKPkJAaWrxALQb/nqpVffakO4knJOh3DrU2SXOMzUzNgo1eADPzu3qSsJY1weCzvR52q9A==
yallist@^4.0.0:
version "4.0.0"
diff --git a/extensions/vscode-colorize-tests/test/colorize-fixtures/test.html b/extensions/vscode-colorize-tests/test/colorize-fixtures/test.html
index 13fd84fbd06..be1437797f8 100644
--- a/extensions/vscode-colorize-tests/test/colorize-fixtures/test.html
+++ b/extensions/vscode-colorize-tests/test/colorize-fixtures/test.html
@@ -39,4 +39,4 @@
<span class="signed-out-tab-flash">You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
</div>
</body>
-</html> \ No newline at end of file
+</html>