From 04d797a047f268e85557aa5d0fce0e61bc4fc31b Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 29 Jul 2026 13:39:42 -0400 Subject: [PATCH] [WIP] Update language client to 10.1.0 - Update to TypeScript 6 (TODO: split off into a different PR) - Update to `vscode-langaugeclient@^10.1.0` - Adjust to changes to language server logging API - VS Code now provides client-side log filtering based on a configured log level. This interacts in a slightly annoying way with our own server side log filtering, but ultimately both are helpful to have, since disabling logging on the client still means the server is sending trace level messages, which may be annoying Required to get `workspace/textDocumentContent` working, see https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3855 Signed-off-by: David Thompson --- package-lock.json | 87 ++++++++++++++------------------------ package.json | 5 +-- src/extension.ts | 7 --- src/outputInfoCollector.ts | 25 +++++++++-- src/providerDispatcher.ts | 5 +-- 5 files changed, 54 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e1cefd77..5850e54fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "semver": "^7.5.2", - "vscode-languageclient": "8.2.0-next.3", + "vscode-languageclient": "^10.1.0", "vscode-variables": "^1.0.1", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", @@ -1237,7 +1237,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-js": { "version": "1.3.1", @@ -2268,19 +2269,6 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -4383,9 +4371,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -5303,62 +5291,49 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "node_modules/vscode-jsonrpc": { - "version": "8.2.1-next.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1-next.1.tgz", - "integrity": "sha512-L+DYtdUtqUXGpyMgHqer6IBKvFFhl/1ToiMmCmG85LYHuuX0jllHMz77MYt0RicakoYY+Lq1yLK6Qj3YBqgzDQ==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.1.tgz", + "integrity": "sha512-rfuA6T75H6m5EkbhtEPzre9pT0HPcDI2MMy4+nPFIBks5J8JBAUHD4tRYSgaBOijIEC7SRkC1kKyXTLqbmh9jw==", "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/vscode-languageclient": { - "version": "8.2.0-next.3", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.2.0-next.3.tgz", - "integrity": "sha512-Ojo6L2cb7GSiyD864k8vGb9fHxBdZeciHQQOF595C3IDHWg0w4KQ7iN7qGWVdl4wDNwlGTX3wWZawGfPTxnrPQ==", - "dependencies": { - "minimatch": "^5.1.0", - "semver": "^7.3.7", - "vscode-languageserver-protocol": "3.17.4-next.3" - }, - "engines": { - "vscode": "^1.79.0" - } - }, - "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", - "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-10.1.0.tgz", + "integrity": "sha512-XXRx6lqVitQy/oOLr9MfNYRG+MbQkhXkDaxbQMiKxEm8zZNfheRFUKNb8UYNh2stn9btl2wQM5wZFJjJvoc+jA==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/vscode-languageclient/node_modules/minimatch": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", - "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" + "minimatch": "^10.2.5", + "semver": "^7.8.1", + "vscode-languageserver-protocol": "3.18.2", + "vscode-languageserver-textdocument": "1.0.13" }, "engines": { - "node": ">=10" + "vscode": "^1.91.0" } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.17.6-next.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.1.tgz", - "integrity": "sha512-2npXUc8oe/fb9Bjcwm2HTWYZXyCbW4NTo7jkOrEciGO+/LfWbSMgqZ6PwKWgqUkgCbkPxQHNjoMqr9ol/Ehjgg==", + "version": "3.18.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.18.2.tgz", + "integrity": "sha512-XRyDbT0Pp3sSNti3JmxVEUMySWCSi1hhM+/KUlCy1hV1zmrqpM1OwO12EAki8blhmLuIMpaJrYbo0OzGVfK2Qg==", "license": "MIT", "dependencies": { - "vscode-jsonrpc": "8.2.1-next.1", - "vscode-languageserver-types": "3.17.6-next.1" + "vscode-jsonrpc": "9.0.1", + "vscode-languageserver-types": "3.18.0" } }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.13.tgz", + "integrity": "sha512-nx0ZHwMGIsVkzFG3/VLeJYBLTaFBRuNdGDvevvjuoayU5EOS2fEYazOhtCM3PI9ClMMg5igc0uwXtAq4tJj+Dw==", + "license": "MIT" + }, "node_modules/vscode-languageserver-types": { - "version": "3.17.6-next.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.6-next.1.tgz", - "integrity": "sha512-7xVc/xLtNhKuCKX0mINT6mFUrUuRz0EinhwPGT8Gtsv2hlo+xJb5NKbiGailcWa1/T5e4dr5Pb2MfGchHreHAA==", + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.18.0.tgz", + "integrity": "sha512-8TsGPNMIMiiBdkORgRSvLjuiEIiAFtO+KssmYWxQ+uSVvlf7RjK8YKCOjPzZ+YA04jXEV7+7LvkSmHkhpNS99g==", "license": "MIT" }, "node_modules/vscode-variables": { diff --git a/package.json b/package.json index 5e0a6f3d7..de46d1c7c 100644 --- a/package.json +++ b/package.json @@ -2194,15 +2194,12 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "semver": "^7.5.2", - "vscode-languageclient": "8.2.0-next.3", + "vscode-languageclient": "^10.1.0", "vscode-variables": "^1.0.1", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", "winston-daily-rotate-file": "^4.7.1" }, - "overrides": { - "vscode-languageserver-protocol": "3.17.6-next.1" - }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" } diff --git a/src/extension.ts b/src/extension.ts index b7bec291a..54f877e5c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -284,13 +284,6 @@ export async function activate(context: ExtensionContext): Promise }); } }, - resolveCompletionItem: async (item, token, next): Promise => { - const completionItem = await next(item, token); - if (completionItem?.documentation instanceof MarkdownString) { - completionItem.documentation = fixJdtLinksInDocumentation(completionItem.documentation); - } - return completionItem; - }, // https://github.com/redhat-developer/vscode-java/issues/2130 // include all diagnostics for the current line in the CodeActionContext params for the performance reason provideCodeActions: async (document, range, context, token, next) => { diff --git a/src/outputInfoCollector.ts b/src/outputInfoCollector.ts index c166e450c..fd93bb00b 100644 --- a/src/outputInfoCollector.ts +++ b/src/outputInfoCollector.ts @@ -1,11 +1,28 @@ -import { OutputChannel, window, ViewColumn } from "vscode"; +import { Event, LogLevel, LogOutputChannel, ViewColumn, window } from "vscode"; import { logger } from "./log"; -export class OutputInfoCollector implements OutputChannel { - private channel: OutputChannel = null; +export class OutputInfoCollector implements LogOutputChannel { + private channel: LogOutputChannel = null; constructor(public name: string) { - this.channel = window.createOutputChannel(this.name); + this.channel = window.createOutputChannel(this.name, { log:true }); + } + get logLevel(): LogLevel { return this.channel.logLevel; } + get onDidChangeLogLevel(): Event { return this.channel.onDidChangeLogLevel; }; + trace(message: string, ...args: any[]): void { + this.channel.trace(message, args); + } + debug(message: string, ...args: any[]): void { + this.channel.debug(message, args); + } + info(message: string, ...args: any[]): void { + this.channel.info(message, args); + } + warn(message: string, ...args: any[]): void { + this.channel.warn(message, args); + } + error(error: string | Error, ...args: any[]): void { + this.channel.error(error, args); } append(value: string): void { diff --git a/src/providerDispatcher.ts b/src/providerDispatcher.ts index abacbe141..869a107b0 100644 --- a/src/providerDispatcher.ts +++ b/src/providerDispatcher.ts @@ -25,16 +25,13 @@ export function registerClientProviders(context: ExtensionContext, options: Prov const symbolProvider = createDocumentSymbolProvider(); context.subscriptions.push(languages.registerDocumentSymbolProvider('java', symbolProvider)); - const jdtProvider = createJDTContentProvider(options); - context.subscriptions.push(workspace.registerTextDocumentContentProvider('jdt', jdtProvider)); - const classProvider = createClassContentProvider(options); context.subscriptions.push(workspace.registerTextDocumentContentProvider('class', classProvider)); overwriteWorkspaceSymbolProvider(context); return { - handles: [hoverProvider, symbolProvider, jdtProvider, classProvider] + handles: [hoverProvider, symbolProvider, classProvider] }; }