diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 6934c47c4..fe7372ba5 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -15,7 +15,8 @@ "group": { "kind": "build", "isDefault": true - } + }, + "problemMatcher": "$tsc-watch", }, { "label": "buildDev", @@ -25,7 +26,8 @@ "group": { "kind": "build", "isDefault": true - } + }, + "problemMatcher": "$tsc-watch", }, { "label": "package", @@ -35,7 +37,8 @@ "group": { "kind": "build", "isDefault": true - } + }, + "problemMatcher": "$tsc-watch", }, { "label": "packageDev", @@ -45,7 +48,8 @@ "group": { "kind": "build", "isDefault": true - } + }, + "problemMatcher": "$tsc-watch", }, { "label": "test", diff --git a/package-lock.json b/package-lock.json index 8a93daedc..4c37e5e8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,8 +36,8 @@ "tmp": "0.0.33", "uuid": "^9.0.0", "vscode-html-languageservice": "^5.3.1", - "vscode-jsonrpc": "9.0.0-next.7", - "vscode-languageclient": "10.0.0-next.14", + "vscode-jsonrpc": "9.0.0-next.8", + "vscode-languageclient": "10.0.0-next.15", "vscode-languageserver-protocol": "3.17.6-next.12", "vscode-languageserver-textdocument": "1.0.12", "vscode-languageserver-types": "3.17.6-next.6", @@ -15671,43 +15671,41 @@ "license": "MIT" }, "node_modules/vscode-jsonrpc": { - "version": "9.0.0-next.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.7.tgz", - "integrity": "sha1-8sKAklHLkF10r9+Dmf5AOtBhZrc=", + "version": "9.0.0-next.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.8.tgz", + "integrity": "sha1-okBbsuz3wWIYUYajI5pna28Ru8Q=", "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/vscode-languageclient": { - "version": "10.0.0-next.14", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageclient/-/vscode-languageclient-10.0.0-next.14.tgz", - "integrity": "sha1-hk+iF1wZGBf8GtxSlZXexjAFFiM=", + "version": "10.0.0-next.15", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageclient/-/vscode-languageclient-10.0.0-next.15.tgz", + "integrity": "sha1-zVrmrEADwsucCB4HhekpAyJN1lU=", "license": "MIT", "dependencies": { "minimatch": "^10.0.1", - "semver": "^7.6.3", - "vscode-languageserver-protocol": "3.17.6-next.12" + "semver": "^7.7.1", + "vscode-languageserver-protocol": "3.17.6-next.13" }, "engines": { "vscode": "^1.91.0" } }, - "node_modules/vscode-languageclient/lib/node/main_modules/brace-expansion": { + "node_modules/vscode-languageclient/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha1-HtxFng8MVISG7Pn8mfIiE2S5oK4=", - "extraneous": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "node_modules/vscode-languageclient/lib/node/main_modules/minimatch": { + "node_modules/vscode-languageclient/node_modules/minimatch": { "version": "10.0.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-10.0.1.tgz", "integrity": "sha1-zgUhhWtFPIbiXyxMDQPm/33cRAs=", - "extraneous": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -15719,11 +15717,10 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/vscode-languageclient/lib/node/main_modules/semver": { + "node_modules/vscode-languageclient/node_modules/semver": { "version": "7.7.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", - "extraneous": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -15732,40 +15729,14 @@ "node": ">=10" } }, - "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha1-HtxFng8MVISG7Pn8mfIiE2S5oK4=", + "node_modules/vscode-languageclient/node_modules/vscode-languageserver-protocol": { + "version": "3.17.6-next.13", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.13.tgz", + "integrity": "sha1-mUfAq8krvmfuoQ0EUtGV9xD6WqQ=", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/vscode-languageclient/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha1-zgUhhWtFPIbiXyxMDQPm/33cRAs=", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/vscode-languageclient/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", - "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "vscode-jsonrpc": "9.0.0-next.8", + "vscode-languageserver-types": "3.17.6-next.6" } }, "node_modules/vscode-languageserver-protocol": { @@ -15778,6 +15749,15 @@ "vscode-languageserver-types": "3.17.6-next.6" } }, + "node_modules/vscode-languageserver-protocol/node_modules/vscode-jsonrpc": { + "version": "9.0.0-next.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.7.tgz", + "integrity": "sha1-8sKAklHLkF10r9+Dmf5AOtBhZrc=", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/vscode-languageserver-textdocument": { "version": "1.0.12", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", @@ -27749,18 +27729,18 @@ } }, "vscode-jsonrpc": { - "version": "9.0.0-next.7", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.7.tgz", - "integrity": "sha1-8sKAklHLkF10r9+Dmf5AOtBhZrc=" + "version": "9.0.0-next.8", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.8.tgz", + "integrity": "sha1-okBbsuz3wWIYUYajI5pna28Ru8Q=" }, "vscode-languageclient": { - "version": "10.0.0-next.14", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageclient/-/vscode-languageclient-10.0.0-next.14.tgz", - "integrity": "sha1-hk+iF1wZGBf8GtxSlZXexjAFFiM=", + "version": "10.0.0-next.15", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageclient/-/vscode-languageclient-10.0.0-next.15.tgz", + "integrity": "sha1-zVrmrEADwsucCB4HhekpAyJN1lU=", "requires": { "minimatch": "^10.0.1", - "semver": "^7.6.3", - "vscode-languageserver-protocol": "3.17.6-next.12" + "semver": "^7.7.1", + "vscode-languageserver-protocol": "3.17.6-next.13" }, "dependencies": { "brace-expansion": { @@ -27783,6 +27763,15 @@ "version": "7.7.1", "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/semver/-/semver-7.7.1.tgz", "integrity": "sha1-q9UJjYKxjGyB9gdP8mR/0+ciDJ8=" + }, + "vscode-languageserver-protocol": { + "version": "3.17.6-next.13", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.13.tgz", + "integrity": "sha1-mUfAq8krvmfuoQ0EUtGV9xD6WqQ=", + "requires": { + "vscode-jsonrpc": "9.0.0-next.8", + "vscode-languageserver-types": "3.17.6-next.6" + } } } }, @@ -27793,6 +27782,13 @@ "requires": { "vscode-jsonrpc": "9.0.0-next.7", "vscode-languageserver-types": "3.17.6-next.6" + }, + "dependencies": { + "vscode-jsonrpc": { + "version": "9.0.0-next.7", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.7.tgz", + "integrity": "sha1-8sKAklHLkF10r9+Dmf5AOtBhZrc=" + } } }, "vscode-languageserver-textdocument": { diff --git a/package.json b/package.json index 266b88bb3..e8aa8f42a 100644 --- a/package.json +++ b/package.json @@ -117,8 +117,8 @@ "tmp": "0.0.33", "uuid": "^9.0.0", "vscode-html-languageservice": "^5.3.1", - "vscode-jsonrpc": "9.0.0-next.7", - "vscode-languageclient": "10.0.0-next.14", + "vscode-jsonrpc": "9.0.0-next.8", + "vscode-languageclient": "10.0.0-next.15", "vscode-languageserver-protocol": "3.17.6-next.12", "vscode-languageserver-textdocument": "1.0.12", "vscode-languageserver-types": "3.17.6-next.6", diff --git a/src/lsptoolshost/activate.ts b/src/lsptoolshost/activate.ts index dfcafe8eb..a9dc00f35 100644 --- a/src/lsptoolshost/activate.ts +++ b/src/lsptoolshost/activate.ts @@ -33,7 +33,7 @@ import { RazorLogger } from '../razor/src/razorLogger'; import { registerRazorEndpoints } from './razor/razorEndpoints'; let _channel: vscode.LogOutputChannel; -let _traceChannel: vscode.OutputChannel; +let _traceChannel: vscode.LogOutputChannel; /** * Creates and activates the Roslyn language server. @@ -51,8 +51,7 @@ export async function activateRoslynLanguageServer( // Create a channel for outputting general logs from the language server. _channel = outputChannel; // Create a separate channel for outputting trace logs - these are incredibly verbose and make other logs very difficult to see. - // The trace channel verbosity is controlled by the _channel verbosity. - _traceChannel = vscode.window.createOutputChannel(vscode.l10n.t('C# LSP Trace Logs')); + _traceChannel = vscode.window.createOutputChannel(vscode.l10n.t('C# LSP Trace Logs'), { log: true }); reporter.sendTelemetryEvent(TelemetryEventNames.ClientInitialize); diff --git a/src/lsptoolshost/server/roslynLanguageServer.ts b/src/lsptoolshost/server/roslynLanguageServer.ts index 2c5796563..e01742327 100644 --- a/src/lsptoolshost/server/roslynLanguageServer.ts +++ b/src/lsptoolshost/server/roslynLanguageServer.ts @@ -260,7 +260,7 @@ export class RoslynLanguageServer { additionalExtensionPaths: string[], languageServerEvents: RoslynLanguageServerEvents, channel: vscode.LogOutputChannel, - traceChannel: vscode.OutputChannel + traceChannel: vscode.LogOutputChannel ): Promise { const devKit = getCSharpDevKit(); if (devKit) { diff --git a/src/omnisharp/engines/lspEngine.ts b/src/omnisharp/engines/lspEngine.ts index d3b1898b6..9677139da 100644 --- a/src/omnisharp/engines/lspEngine.ts +++ b/src/omnisharp/engines/lspEngine.ts @@ -13,7 +13,7 @@ import * as ObservableEvents from '../omnisharpLoggingEvents'; import { EventStream } from '../../eventStream'; import CompositeDisposable from '../../compositeDisposable'; import Disposable from '../../disposable'; -import { ExtensionContext, CancellationTokenSource, OutputChannel, Location, CodeLens, Uri } from 'vscode'; +import { ExtensionContext, CancellationTokenSource, LogOutputChannel, Location, CodeLens, Uri } from 'vscode'; import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; import { Events, OmniSharpServer } from '../server'; import { IEngine } from './IEngine'; @@ -42,7 +42,7 @@ export class LspEngine implements IEngine { private eventBus: EventEmitter, private eventStream: EventStream, private context: ExtensionContext, - private outputChannel: OutputChannel, + private outputChannel: LogOutputChannel, private disposables: CompositeDisposable, private languageMiddlewareFeature: LanguageMiddlewareFeature, private platformInfo: PlatformInformation, diff --git a/src/omnisharp/omnisharpLanguageServer.ts b/src/omnisharp/omnisharpLanguageServer.ts index 0d625b770..6435e977a 100644 --- a/src/omnisharp/omnisharpLanguageServer.ts +++ b/src/omnisharp/omnisharpLanguageServer.ts @@ -89,7 +89,13 @@ export async function activateOmniSharpLanguageServer( eventStream.subscribe(dotnetTestChannelObserver.post); eventStream.subscribe(dotnetTestLoggerObserver.post); - const omnisharpChannel = vscode.window.createOutputChannel(vscode.l10n.t('OmniSharp Log')); + // If we're in LSP mode, we can create a LogOutputChannel since that's what the LSP client now supports. + // If we're not in LSP mode, we'll create a regular OutputChannel since the log formatting expects to be able to write + // it's own formatted outputs which gets mixed up with LogOutputChannels.s + const omnisharpChannel = omnisharpOptions.enableLspDriver + ? vscode.window.createOutputChannel(vscode.l10n.t('OmniSharp Log'), { log: true }) + : vscode.window.createOutputChannel(vscode.l10n.t('OmniSharp Log')); + const omnisharpLogObserver = new OmnisharpLoggerObserver(omnisharpChannel, platformInfo); const omnisharpChannelObserver = new OmnisharpChannelObserver(omnisharpChannel); eventStream.subscribe(omnisharpLogObserver.post); diff --git a/src/omnisharp/server.ts b/src/omnisharp/server.ts index cc749ee64..bc60e6f8b 100644 --- a/src/omnisharp/server.ts +++ b/src/omnisharp/server.ts @@ -21,7 +21,7 @@ import { Subject } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; import CompositeDisposable from '../compositeDisposable'; import Disposable from '../disposable'; -import { ExtensionContext, OutputChannel } from 'vscode'; +import { ExtensionContext, LogOutputChannel, OutputChannel } from 'vscode'; import { LanguageMiddlewareFeature } from './languageMiddlewareFeature'; import { LspEngine } from './engines/lspEngine'; import { IEngine } from './engines/IEngine'; @@ -314,7 +314,8 @@ export class OmniSharpServer { this._eventBus, this.eventStream, this.context, - this.outputChannel, + // If we are in LSP mode, then we created an LogOutputChannel originally + this.outputChannel as LogOutputChannel, disposables, this.languageMiddlewareFeature, this.platformInfo, diff --git a/src/razor/src/razorLanguageServerOptions.ts b/src/razor/src/razorLanguageServerOptions.ts index 1cf2d80bf..d7e362a3c 100644 --- a/src/razor/src/razorLanguageServerOptions.ts +++ b/src/razor/src/razorLanguageServerOptions.ts @@ -7,7 +7,7 @@ import * as vscode from 'vscode'; export interface RazorLanguageServerOptions { serverPath: string; - outputChannel?: vscode.OutputChannel; + outputChannel?: vscode.LogOutputChannel; debug?: boolean; usingOmniSharp: boolean; forceRuntimeCodeGeneration: boolean;