diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 15bedd6eb2..b233203d20 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -34,6 +34,7 @@ ## Project Conventions & Patterns - **TypeScript**: Follows strict linting (`.eslintrc.js`), including header/license blocks and camelCase filenames (except for interfaces and special files). - **Code Formatting**: After making code edits, always run `npx eslint --fix` to auto-fix formatting issues (prettier) and lint errors. This ensures code passes CI checks. +- **Language Client Imports**: Import shared protocol and middleware types from `vscode-languageclient`, but import the concrete `LanguageClient`, process-launch `ServerOptions`, and transport types from `vscode-languageclient/node`. Do not add new direct imports or type references from `vscode-jsonrpc` or `vscode-languageserver-protocol` in code that flows through the language client; prefer the `vscode-languageclient` re-exports instead. Avoid defining request and notification types from bare `vscode-jsonrpc`, since mixed package instances can cause parameter-structure type and runtime mismatches. - **Component Downloads**: Language servers and debuggers are downloaded at runtime; see `package.json` for URLs and install logic. - **Copilot Providers**: Use `registerCopilotContextProviders` and `registerCopilotRelatedFilesProvider` to extend Copilot context for C#. - **Testing**: Prefer integration tests over unit tests for features. Structure follows: diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index ecdd104beb..cf55359498 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -258,7 +258,6 @@ "Recording trace... Click Cancel to stop and save.": "Recording trace... Click Cancel to stop and save.", "Recording logs... Click Cancel to stop and save.": "Recording logs... Click Cancel to stop and save.", "Collecting C# Logs": "Collecting C# Logs", - "Generated document not found": "Generated document not found", "Nested Code Action": "Nested Code Action", "Fix All: ": "Fix All: ", "Pick a fix all scope": "Pick a fix all scope", diff --git a/package-lock.json b/package-lock.json index 669fed1d92..a7d48ca929 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,11 +25,7 @@ "rxjs": "6.6.7", "semver": "7.5.4", "vscode-html-languageservice": "^5.3.1", - "vscode-jsonrpc": "9.0.0-next.10", - "vscode-languageclient": "10.0.0-next.18", - "vscode-languageserver-protocol": "3.17.6-next.15", - "vscode-languageserver-textdocument": "1.0.12", - "vscode-languageserver-types": "3.17.6-next.6", + "vscode-languageclient": "10.0.0-next.20", "yauzl": "3.2.1" }, "devDependencies": { @@ -12380,23 +12376,23 @@ "license": "MIT" }, "node_modules/vscode-jsonrpc": { - "version": "9.0.0-next.10", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.10.tgz", - "integrity": "sha1-piEsWE8lY4TPa07dhpZiF2ORi6Y=", + "version": "9.0.0-next.11", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.11.tgz", + "integrity": "sha1-6Sxurk6NCVDTD6hy9RX76cr18Pg=", "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/vscode-languageclient": { - "version": "10.0.0-next.18", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageclient/-/vscode-languageclient-10.0.0-next.18.tgz", - "integrity": "sha1-OTsUfnv4qhjhms74o9y0i4vf+ME=", + "version": "10.0.0-next.20", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageclient/-/vscode-languageclient-10.0.0-next.20.tgz", + "integrity": "sha1-6Mm7cctE4+gImdRLPv/C1T+und0=", "license": "MIT", "dependencies": { - "minimatch": "^10.0.3", + "minimatch": "^10.1.2", "semver": "^7.7.1", - "vscode-languageserver-protocol": "3.17.6-next.15" + "vscode-languageserver-protocol": "3.17.6-next.16" }, "engines": { "vscode": "^1.91.0" @@ -12450,13 +12446,13 @@ "node": ">=10" } }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.17.6-next.15", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.15.tgz", - "integrity": "sha1-9QqUda6tacDpDgMPHt6XFL83GYc=", + "node_modules/vscode-languageclient/node_modules/vscode-languageserver-protocol": { + "version": "3.17.6-next.16", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.16.tgz", + "integrity": "sha1-Sr22BlL3wUkWQgdieXxKtp460+Y=", "license": "MIT", "dependencies": { - "vscode-jsonrpc": "9.0.0-next.10", + "vscode-jsonrpc": "9.0.0-next.11", "vscode-languageserver-types": "3.17.6-next.6" } }, @@ -21612,18 +21608,18 @@ } }, "vscode-jsonrpc": { - "version": "9.0.0-next.10", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.10.tgz", - "integrity": "sha1-piEsWE8lY4TPa07dhpZiF2ORi6Y=" + "version": "9.0.0-next.11", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.11.tgz", + "integrity": "sha1-6Sxurk6NCVDTD6hy9RX76cr18Pg=" }, "vscode-languageclient": { - "version": "10.0.0-next.18", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageclient/-/vscode-languageclient-10.0.0-next.18.tgz", - "integrity": "sha1-OTsUfnv4qhjhms74o9y0i4vf+ME=", + "version": "10.0.0-next.20", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageclient/-/vscode-languageclient-10.0.0-next.20.tgz", + "integrity": "sha1-6Mm7cctE4+gImdRLPv/C1T+und0=", "requires": { - "minimatch": "^10.0.3", + "minimatch": "^10.1.2", "semver": "^7.7.1", - "vscode-languageserver-protocol": "3.17.6-next.15" + "vscode-languageserver-protocol": "3.17.6-next.16" }, "dependencies": { "balanced-match": { @@ -21651,18 +21647,18 @@ "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.16", + "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.16.tgz", + "integrity": "sha1-Sr22BlL3wUkWQgdieXxKtp460+Y=", + "requires": { + "vscode-jsonrpc": "9.0.0-next.11", + "vscode-languageserver-types": "3.17.6-next.6" + } } } }, - "vscode-languageserver-protocol": { - "version": "3.17.6-next.15", - "resolved": "https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-public-npm/npm/registry/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.15.tgz", - "integrity": "sha1-9QqUda6tacDpDgMPHt6XFL83GYc=", - "requires": { - "vscode-jsonrpc": "9.0.0-next.10", - "vscode-languageserver-types": "3.17.6-next.6" - } - }, "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", diff --git a/package.json b/package.json index 2216190c84..a9a7be10b2 100644 --- a/package.json +++ b/package.json @@ -125,11 +125,7 @@ "rxjs": "6.6.7", "semver": "7.5.4", "vscode-html-languageservice": "^5.3.1", - "vscode-jsonrpc": "9.0.0-next.10", - "vscode-languageclient": "10.0.0-next.18", - "vscode-languageserver-protocol": "3.17.6-next.15", - "vscode-languageserver-textdocument": "1.0.12", - "vscode-languageserver-types": "3.17.6-next.6", + "vscode-languageclient": "10.0.0-next.20", "yauzl": "3.2.1" }, "devDependencies": { diff --git a/src/coreclrDebug/activate.ts b/src/coreclrDebug/activate.ts index 16c955cba0..312522a3e4 100644 --- a/src/coreclrDebug/activate.ts +++ b/src/coreclrDebug/activate.ts @@ -20,9 +20,8 @@ import { RemoteAttachPicker } from '../shared/processPicker'; import CompositeDisposable from '../compositeDisposable'; import { BaseVsDbgConfigurationProvider } from '../shared/configurationProvider'; import { omnisharpOptions } from '../shared/options'; -import { ActionOption, showErrorMessage } from '../shared/observers/utils/showMessage'; +import { ActionOption, CommandOption, showErrorMessage } from '../shared/observers/utils/showMessage'; import { getCSharpDevKit } from '../utils/getCSharpDevKit'; -import { Command } from 'vscode-languageserver-types'; export async function activate( thisExtension: vscode.Extension, @@ -224,7 +223,7 @@ function showInstallErrorMessage(eventStream: EventStream) { function showDotnetToolsWarning(message: string): void { const config = vscode.workspace.getConfiguration('csharp'); if (!config.get('suppressDotnetInstallWarning', false)) { - const getDotNetMessage: ActionOption | Command = + const getDotNetMessage: ActionOption | CommandOption = getCSharpDevKit() !== undefined ? { title: vscode.l10n.t('Get the SDK'), diff --git a/src/csharpExtensionExports.ts b/src/csharpExtensionExports.ts index 93c5bb69ed..c7d77db8c5 100644 --- a/src/csharpExtensionExports.ts +++ b/src/csharpExtensionExports.ts @@ -8,8 +8,8 @@ import { Advisor } from './omnisharp/features/diagnosticsProvider'; import { EventStream } from './eventStream'; import TestManager from './omnisharp/features/dotnetTest'; import { GlobalBrokeredServiceContainer } from '@microsoft/servicehub-framework'; -import { PartialResultParams, ProtocolRequestType, RequestType } from 'vscode-languageclient/node'; import { LanguageServerEvents } from './lsptoolshost/server/languageServerEvents'; +import { PartialResultParams, ProtocolRequestType, RequestParam, RequestType } from 'vscode-languageclient'; export interface LimitedExtensionExports { isLimitedActivation: true; @@ -49,7 +49,7 @@ export interface CSharpExtensionExports { export interface CSharpExtensionExperimentalExports { sendServerRequest: ( type: RequestType, - params: Params, + params: RequestParam, token: vscode.CancellationToken ) => Promise; sendServerRequestWithProgress< @@ -60,7 +60,7 @@ export interface CSharpExtensionExperimentalExports { RegistrationOptions >( type: ProtocolRequestType, - params: Params, + params: RequestParam, onProgress: (p: PartialResult) => Promise, token?: vscode.CancellationToken ): Promise; diff --git a/src/lsptoolshost/activate.ts b/src/lsptoolshost/activate.ts index 5e58da9a47..d7b92888f4 100644 --- a/src/lsptoolshost/activate.ts +++ b/src/lsptoolshost/activate.ts @@ -20,7 +20,6 @@ import { registerCodeActionFixAllCommands } from './diagnostics/fixAllCodeAction import { commonOptions, languageServerOptions } from '../shared/options'; import { registerNestedCodeActionCommands } from './diagnostics/nestedCodeAction'; import { registerRestoreCommands } from './projectRestore/restore'; -import { registerSourceGeneratedFilesContentProvider } from './generators/sourceGeneratedFilesContentProvider'; import { registerMiscellaneousFileNotifier } from './workspace/miscellaneousFileNotifier'; import { TelemetryEventNames } from '../shared/telemetryEventNames'; import { WorkspaceStatus } from './workspace/workspaceStatus'; @@ -96,7 +95,6 @@ export async function activateRoslynLanguageServer( registerRestoreCommands(context, languageServer, _channel); - registerSourceGeneratedFilesContentProvider(context, languageServer); registerSourceGeneratorRefresh(context, languageServer, _channel); context.subscriptions.push(registerLanguageServerOptionChanges(optionObservable)); diff --git a/src/lsptoolshost/autoInsert/onAutoInsert.ts b/src/lsptoolshost/autoInsert/onAutoInsert.ts index afbfb3e43e..e0d9d94a7b 100644 --- a/src/lsptoolshost/autoInsert/onAutoInsert.ts +++ b/src/lsptoolshost/autoInsert/onAutoInsert.ts @@ -4,14 +4,10 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { - FormattingOptions, - InsertTextFormat, - LanguageClient, - TextDocumentIdentifier, -} from 'vscode-languageclient/node'; import * as RoslynProtocol from '../server/roslynProtocol'; import { RoslynLanguageServer } from '../server/roslynLanguageServer'; +import { FormattingOptions, InsertTextFormat, Range, TextDocumentIdentifier } from 'vscode-languageclient'; +import { LanguageClient } from 'vscode-languageclient/node'; export function registerOnAutoInsert(languageServer: RoslynLanguageServer, languageClient: LanguageClient) { let source = new vscode.CancellationTokenSource(); @@ -33,7 +29,7 @@ export function registerOnAutoInsert(languageServer: RoslynLanguageServer, langu } // Convert to a VSCode range for ease of handling. - const vscodeRange = languageClient.protocol2CodeConverter.asRange(change.range); + const vscodeRange = languageClient.protocol2CodeConverter.asRange(change.range as Range); // Empty or multiline changes are not supported for onautoinsert. if (!vscodeRange.isEmpty || !vscodeRange.isSingleLine) { diff --git a/src/lsptoolshost/autoInsert/onAutoInsertFeature.ts b/src/lsptoolshost/autoInsert/onAutoInsertFeature.ts index e89a1c9f70..68c838bc5b 100644 --- a/src/lsptoolshost/autoInsert/onAutoInsertFeature.ts +++ b/src/lsptoolshost/autoInsert/onAutoInsertFeature.ts @@ -10,7 +10,7 @@ import { TextDocument, } from 'vscode'; -import { DynamicFeature, FeatureState, LanguageClient, RegistrationData, ensure } from 'vscode-languageclient/node'; +import { DynamicFeature, FeatureState, RegistrationData, ensure } from 'vscode-languageclient'; import { ClientCapabilities, @@ -19,10 +19,11 @@ import { ProtocolRequestType, RegistrationType, ServerCapabilities, -} from 'vscode-languageserver-protocol'; +} from 'vscode-languageclient'; import * as RoslynProtocol from '../server/roslynProtocol'; import { randomUUID } from 'crypto'; +import { LanguageClient } from 'vscode-languageclient/node'; export class OnAutoInsertFeature implements DynamicFeature { private readonly _client: LanguageClient; diff --git a/src/lsptoolshost/copilot/contextProviders.ts b/src/lsptoolshost/copilot/contextProviders.ts index 78722dbbf0..12f1c5c806 100644 --- a/src/lsptoolshost/copilot/contextProviders.ts +++ b/src/lsptoolshost/copilot/contextProviders.ts @@ -9,7 +9,7 @@ import { type ContextProvider, } from '@github/copilot-language-server'; import * as vscode from 'vscode'; -import * as lsp from 'vscode-languageserver-protocol'; +import * as lsp from 'vscode-languageclient'; import { RoslynLanguageServer } from '../server/roslynLanguageServer'; import { CSharpExtensionId } from '../../constants/csharpExtensionId'; import { getCSharpDevKit } from '../../utils/getCSharpDevKit'; diff --git a/src/lsptoolshost/diagnostics/buildResultReporterService.ts b/src/lsptoolshost/diagnostics/buildResultReporterService.ts index 8055f36c5b..ed2587e661 100644 --- a/src/lsptoolshost/diagnostics/buildResultReporterService.ts +++ b/src/lsptoolshost/diagnostics/buildResultReporterService.ts @@ -2,8 +2,8 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { CancellationToken } from 'vscode-languageclient'; import { RoslynLanguageServer } from '../server/roslynLanguageServer'; -import { CancellationToken } from 'vscode-jsonrpc'; import * as vscode from 'vscode'; interface IBuildResultDiagnostics { diff --git a/src/lsptoolshost/diagnostics/diagnosticMiddleware.ts b/src/lsptoolshost/diagnostics/diagnosticMiddleware.ts index aaf1fedb1a..5adba60290 100644 --- a/src/lsptoolshost/diagnostics/diagnosticMiddleware.ts +++ b/src/lsptoolshost/diagnostics/diagnosticMiddleware.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { ProvideDiagnosticSignature, ProvideWorkspaceDiagnosticSignature, vsdiag } from 'vscode-languageclient/node'; +import { ProvideDiagnosticSignature, ProvideWorkspaceDiagnosticSignature, vsdiag } from 'vscode-languageclient'; import { languageServerOptions } from '../../shared/options'; export async function provideDiagnostics( diff --git a/src/lsptoolshost/diagnostics/fixAllCodeAction.ts b/src/lsptoolshost/diagnostics/fixAllCodeAction.ts index 13c17aa204..650ba70800 100644 --- a/src/lsptoolshost/diagnostics/fixAllCodeAction.ts +++ b/src/lsptoolshost/diagnostics/fixAllCodeAction.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode'; import * as RoslynProtocol from '../server/roslynProtocol'; -import { LSPAny } from 'vscode-languageserver-protocol'; +import { LSPAny } from 'vscode-languageclient'; import { RoslynLanguageServer } from '../server/roslynLanguageServer'; import { URIConverter, createConverter } from 'vscode-languageclient/protocolConverter'; import { UriConverter } from '../utils/uriConverter'; diff --git a/src/lsptoolshost/diagnostics/nestedCodeAction.ts b/src/lsptoolshost/diagnostics/nestedCodeAction.ts index 81341a653d..699608b431 100644 --- a/src/lsptoolshost/diagnostics/nestedCodeAction.ts +++ b/src/lsptoolshost/diagnostics/nestedCodeAction.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { CodeAction, CodeActionResolveRequest, LSPAny } from 'vscode-languageserver-protocol'; +import { CodeAction, CodeActionResolveRequest, LSPAny } from 'vscode-languageclient'; import { RoslynLanguageServer } from '../server/roslynLanguageServer'; import { URIConverter, createConverter } from 'vscode-languageclient/protocolConverter'; import { UriConverter } from '../utils/uriConverter'; diff --git a/src/lsptoolshost/extensions/roslynLanguageServerExportChannel.ts b/src/lsptoolshost/extensions/roslynLanguageServerExportChannel.ts index e3cd33b2bf..9e3c44f1ea 100644 --- a/src/lsptoolshost/extensions/roslynLanguageServerExportChannel.ts +++ b/src/lsptoolshost/extensions/roslynLanguageServerExportChannel.ts @@ -3,22 +3,21 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { RequestType } from 'vscode-jsonrpc'; import { RoslynLanguageServer } from '../server/roslynLanguageServer'; -import { PartialResultParams, ProtocolRequestType } from 'vscode-languageserver-protocol'; +import { PartialResultParams, ProtocolRequestType, RequestParam, RequestType } from 'vscode-languageclient'; export class RoslynLanguageServerExport { constructor(private _serverInitialized: Promise) {} public async sendRequest( type: RequestType, - params: Params, + params: RequestParam, token: vscode.CancellationToken ): Promise { const server = await this._serverInitialized; // We need to recreate the type parameter to ensure that the prototypes line up. The `RequestType` we receive could have been // from a different version. - const newType = new RequestType(type.method); + const newType = new RequestType(type.method, type.parameterStructures); return await server.sendRequest(newType, params, token); } @@ -30,7 +29,7 @@ export class RoslynLanguageServerExport { RegistrationOptions >( type: ProtocolRequestType, - params: Params, + params: RequestParam, onProgress: (p: PartialResult) => Promise, token?: vscode.CancellationToken ): Promise { diff --git a/src/lsptoolshost/generators/sourceGeneratedFilesContentProvider.ts b/src/lsptoolshost/generators/sourceGeneratedFilesContentProvider.ts deleted file mode 100644 index fadd2d86b4..0000000000 --- a/src/lsptoolshost/generators/sourceGeneratedFilesContentProvider.ts +++ /dev/null @@ -1,107 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as vscode from 'vscode'; -import * as RoslynProtocol from '../server/roslynProtocol'; -import { RoslynLanguageServer } from '../server/roslynLanguageServer'; -import * as lsp from 'vscode-languageserver-protocol'; -import { IDisposable } from '@microsoft/servicehub-framework'; -import { UriConverter } from '../utils/uriConverter'; - -export function registerSourceGeneratedFilesContentProvider( - context: vscode.ExtensionContext, - languageServer: RoslynLanguageServer -) { - context.subscriptions.push( - vscode.workspace.registerTextDocumentContentProvider( - 'roslyn-source-generated', - new RoslynSourceGeneratedContentProvider(languageServer) - ) - ); -} - -class RoslynSourceGeneratedContentProvider implements vscode.TextDocumentContentProvider, IDisposable { - private _onDidChangeEmitter: vscode.EventEmitter = new vscode.EventEmitter(); - - // Stores all the source generated documents that we have opened so far and their up to date content. - private _openedDocuments: Map = new Map(); - - // Since we could potentially have multiple refresh notifications in flight at the same time, - // we use a simple queue to ensure that updates to our state map only happen serially. - private _updateQueue?: Promise; - - private _cancellationSource = new vscode.CancellationTokenSource(); - - constructor(private languageServer: RoslynLanguageServer) { - languageServer.registerOnNotification( - RoslynProtocol.RefreshSourceGeneratedDocumentNotification.method, - async () => { - this._openedDocuments.forEach(async (_, key) => { - await this.enqueueDocumentUpdateAsync(key, this._cancellationSource.token); - this._onDidChangeEmitter.fire(key); - }); - } - ); - vscode.workspace.onDidCloseTextDocument((document) => { - const openedDoc = this._openedDocuments.get(document.uri); - if (openedDoc !== undefined) { - this._openedDocuments.delete(document.uri); - } - }); - } - - public onDidChange: vscode.Event = this._onDidChangeEmitter.event; - - async provideTextDocumentContent(uri: vscode.Uri, token: vscode.CancellationToken): Promise { - let content = this._openedDocuments.get(uri); - - if (!content) { - // We're being asked about this document for the first time, so we need to fetch it from the server. - content = await this.enqueueDocumentUpdateAsync(uri, token); - } - - return content.text ?? vscode.l10n.t('Generated document not found'); - } - - private async enqueueDocumentUpdateAsync( - uri: vscode.Uri, - token: vscode.CancellationToken - ): Promise { - if (!this._updateQueue) { - this._updateQueue = this.updateDocumentAsync(uri, token); - } else { - this._updateQueue = this._updateQueue.then(async () => await this.updateDocumentAsync(uri, token)); - } - - return await this._updateQueue; - } - - private async updateDocumentAsync( - uri: vscode.Uri, - token: vscode.CancellationToken - ): Promise { - const currentContent = this._openedDocuments.get(uri); - const newContent = await this.languageServer.sendRequest( - RoslynProtocol.SourceGeneratorGetTextRequest.type, - { - textDocument: lsp.TextDocumentIdentifier.create(UriConverter.serialize(uri)), - resultId: currentContent?.resultId, - }, - token - ); - - // If we had no content before, or the resultId has changed, update the content - if (!currentContent || newContent.resultId !== currentContent?.resultId) { - this._openedDocuments.set(uri, newContent); - return newContent; - } - - return currentContent; - } - - dispose(): void { - this._cancellationSource.cancel(); - } -} diff --git a/src/lsptoolshost/handlers/showToastNotification.ts b/src/lsptoolshost/handlers/showToastNotification.ts index 3defcbe669..e11f52d1b9 100644 --- a/src/lsptoolshost/handlers/showToastNotification.ts +++ b/src/lsptoolshost/handlers/showToastNotification.ts @@ -5,7 +5,7 @@ import * as vscode from 'vscode'; import { RoslynLanguageClient } from '../server/roslynLanguageClient'; -import { MessageType } from 'vscode-languageserver-protocol'; +import { MessageType } from 'vscode-languageclient'; import { ShowToastNotification } from '../server/roslynProtocol'; import { showErrorMessage, showInformationMessage, showWarningMessage } from '../../shared/observers/utils/showMessage'; diff --git a/src/lsptoolshost/options/configurationMiddleware.ts b/src/lsptoolshost/options/configurationMiddleware.ts index 352ec81515..e8bfc1bd89 100644 --- a/src/lsptoolshost/options/configurationMiddleware.ts +++ b/src/lsptoolshost/options/configurationMiddleware.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { ConfigurationParams } from 'vscode-languageclient/node'; +import { ConfigurationParams } from 'vscode-languageclient'; import { convertServerOptionNameToClientConfigurationName as convertServerOptionNameToClientConfigurationName } from './optionNameConverter'; import { readEquivalentVsCodeConfiguration } from './universalEditorConfigProvider'; diff --git a/src/lsptoolshost/projectContext/projectContextCommands.ts b/src/lsptoolshost/projectContext/projectContextCommands.ts index 5f7d710a7e..4715f74ab5 100644 --- a/src/lsptoolshost/projectContext/projectContextCommands.ts +++ b/src/lsptoolshost/projectContext/projectContextCommands.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode'; import { isRelevantDocument } from './projectContextService'; import { RoslynLanguageServer } from '../server/roslynLanguageServer'; import { VSProjectContext } from '../server/roslynProtocol'; -import { CancellationToken } from 'vscode-languageclient/node'; +import { CancellationToken } from 'vscode-languageclient'; export const changeProjectContextCommandName = 'csharp.changeProjectContext'; export const changeProjectContextFileExplorer = 'csharp.changeProjectContextFileExplorer'; diff --git a/src/lsptoolshost/projectContext/projectContextFeature.ts b/src/lsptoolshost/projectContext/projectContextFeature.ts index f382fc2e54..2791f056b6 100644 --- a/src/lsptoolshost/projectContext/projectContextFeature.ts +++ b/src/lsptoolshost/projectContext/projectContextFeature.ts @@ -10,7 +10,7 @@ import { TextDocument, } from 'vscode'; -import { DynamicFeature, FeatureState, LanguageClient, RegistrationData, ensure } from 'vscode-languageclient/node'; +import { DynamicFeature, FeatureState, RegistrationData, ensure } from 'vscode-languageclient'; import { ClientCapabilities, @@ -20,10 +20,11 @@ import { RegistrationType, ServerCapabilities, TextDocumentRegistrationOptions, -} from 'vscode-languageserver-protocol'; +} from 'vscode-languageclient'; import * as RoslynProtocol from '../server/roslynProtocol'; import { randomUUID } from 'crypto'; +import { LanguageClient } from 'vscode-languageclient/node'; export class ProjectContextFeature implements DynamicFeature { private readonly _client: LanguageClient; diff --git a/src/lsptoolshost/projectContext/projectContextService.ts b/src/lsptoolshost/projectContext/projectContextService.ts index 67a8a94a23..53df227d52 100644 --- a/src/lsptoolshost/projectContext/projectContextService.ts +++ b/src/lsptoolshost/projectContext/projectContextService.ts @@ -11,7 +11,7 @@ import { VSProjectContext, VSProjectContextList, } from '../server/roslynProtocol'; -import { TextDocumentIdentifier } from 'vscode-languageserver-protocol'; +import { TextDocumentIdentifier } from 'vscode-languageclient'; import { UriConverter } from '../utils/uriConverter'; import { LanguageServerEvents, ServerState } from '../server/languageServerEvents'; import { RoslynLanguageClient } from '../server/roslynLanguageClient'; diff --git a/src/lsptoolshost/projectRestore/restore.ts b/src/lsptoolshost/projectRestore/restore.ts index 413a9be153..dbabc0b2d1 100644 --- a/src/lsptoolshost/projectRestore/restore.ts +++ b/src/lsptoolshost/projectRestore/restore.ts @@ -9,7 +9,7 @@ import { RestorableProjects, RestoreParams, RestoreRequest } from '../server/ros import path from 'path'; import { showErrorMessage } from '../../shared/observers/utils/showMessage'; import { getCSharpDevKit } from '../../utils/getCSharpDevKit'; -import { CancellationToken } from 'vscode-jsonrpc'; +import { CancellationToken } from 'vscode-languageclient'; let _restoreInProgress = false; diff --git a/src/lsptoolshost/razor/documentContentsRequest.ts b/src/lsptoolshost/razor/documentContentsRequest.ts index 4817eea418..4309337869 100644 --- a/src/lsptoolshost/razor/documentContentsRequest.ts +++ b/src/lsptoolshost/razor/documentContentsRequest.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { TextDocumentIdentifier } from 'vscode-languageserver-types'; +import { TextDocumentIdentifier } from 'vscode-languageclient'; import { GeneratedDocumentKind } from './generatedDocumentKind'; export class DocumentContentsRequest { diff --git a/src/lsptoolshost/razor/htmlDocumentManager.ts b/src/lsptoolshost/razor/htmlDocumentManager.ts index f7980119a4..0ab2be876f 100644 --- a/src/lsptoolshost/razor/htmlDocumentManager.ts +++ b/src/lsptoolshost/razor/htmlDocumentManager.ts @@ -10,7 +10,7 @@ import { getUriPath } from '../../razor/src/uriPaths'; import { HtmlDocumentContentProvider } from './htmlDocumentContentProvider'; import { HtmlDocument } from './htmlDocument'; import { RoslynLanguageServer } from '../server/roslynLanguageServer'; -import { RequestType, TextDocumentIdentifier } from 'vscode-languageserver-protocol'; +import { RequestType, TextDocumentIdentifier } from 'vscode-languageclient'; import { UriConverter } from '../utils/uriConverter'; const virtualHtmlSuffix = '__virtual.html'; diff --git a/src/lsptoolshost/razor/htmlForwardedRequest.ts b/src/lsptoolshost/razor/htmlForwardedRequest.ts index f49413f00f..93d3ec84b2 100644 --- a/src/lsptoolshost/razor/htmlForwardedRequest.ts +++ b/src/lsptoolshost/razor/htmlForwardedRequest.ts @@ -2,7 +2,8 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { TextDocumentIdentifier } from 'vscode-languageserver-types'; + +import { TextDocumentIdentifier } from 'vscode-languageclient'; export class HtmlForwardedRequest { constructor( diff --git a/src/lsptoolshost/razor/htmlUpdateParameters.ts b/src/lsptoolshost/razor/htmlUpdateParameters.ts index dc4ae49930..75be7fbf9a 100644 --- a/src/lsptoolshost/razor/htmlUpdateParameters.ts +++ b/src/lsptoolshost/razor/htmlUpdateParameters.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { TextDocumentIdentifier } from 'vscode-languageserver-protocol'; +import { TextDocumentIdentifier } from 'vscode-languageclient'; export class HtmlUpdateParameters { constructor( diff --git a/src/lsptoolshost/razor/razorEndpoints.ts b/src/lsptoolshost/razor/razorEndpoints.ts index e217c59c57..56400556c7 100644 --- a/src/lsptoolshost/razor/razorEndpoints.ts +++ b/src/lsptoolshost/razor/razorEndpoints.ts @@ -25,6 +25,7 @@ import { MarkupContent, NotificationType, ReferencesRequest, + RequestHandler, RequestType, SignatureHelp, SignatureHelpRequest, @@ -74,23 +75,24 @@ export function registerRazorEndpoints( function registerCohostingEndpoints() { const documentManager = new HtmlDocumentManager(platformInfo, roslynLanguageServer, razorLogger); const reportIssueCommand = new ReportIssueCommand(vscode, documentManager, roslynLanguageServer, razorLogger); + const updateHtmlRequestType = new RequestType('razor/updateHtml'); context.subscriptions.push(documentManager.register()); context.subscriptions.push(reportIssueCommand.register()); - registerMethodHandler('razor/updateHtml', async (params) => { + registerMethodHandler(updateHtmlRequestType, async (params) => { const uri = UriConverter.deserialize(params.textDocument.uri); await documentManager.updateDocumentText(uri, params.checksum, params.text); }); - registerCohostHandler(DocumentColorRequest.type, documentManager, async (document) => { + registerCohostHandler(DocumentColorRequest.type, documentManager, [], async (document) => { return await DocumentColorHandler.doDocumentColorRequest(document.uri); }); - registerCohostHandler(ColorPresentationRequest.type, documentManager, async (document, params) => { + registerCohostHandler(ColorPresentationRequest.type, documentManager, [], async (document, params) => { return await ColorPresentationHandler.doColorPresentationRequest(document.uri, params); }); - registerCohostHandler(FoldingRangeRequest.type, documentManager, async (document) => { + registerNullableCohostHandler(FoldingRangeRequest.type, documentManager, async (document) => { const results = await vscode.commands.executeCommand( 'vscode.executeFoldingRangeProvider', document.uri @@ -99,7 +101,7 @@ export function registerRazorEndpoints( return FoldingRangeHandler.convertFoldingRanges(results, razorLogger); }); - registerCohostHandler(HoverRequest.type, documentManager, async (document, params) => { + registerNullableCohostHandler(HoverRequest.type, documentManager, async (document, params) => { const results = await vscode.commands.executeCommand( 'vscode.executeHoverProvider', document.uri, @@ -110,7 +112,7 @@ export function registerRazorEndpoints( return rewriteHover(applicableHover); }); - registerCohostHandler(DocumentHighlightRequest.type, documentManager, async (document, params) => { + registerNullableCohostHandler(DocumentHighlightRequest.type, documentManager, async (document, params) => { const results = await vscode.commands.executeCommand( 'vscode.executeDocumentHighlights', document.uri, @@ -120,45 +122,45 @@ export function registerRazorEndpoints( return rewriteHighlight(results); }); - registerCohostHandler(CompletionRequest.type, documentManager, async (document, params) => { - return CompletionHandler.provideVscodeCompletions( + registerNullableCohostHandler(CompletionRequest.type, documentManager, async (document, params) => { + return await CompletionHandler.provideVscodeCompletions( document.uri, params.position, params.context?.triggerCharacter ); }); - registerCohostHandler(ReferencesRequest.type, documentManager, async (document, params) => { + registerNullableCohostHandler(ReferencesRequest.type, documentManager, async (document, params) => { const results = await vscode.commands.executeCommand( 'vscode.executeReferenceProvider', document.uri, params.position ); - return rewriteLocations(results); + return rewriteLocations(results ?? []); }); - registerCohostHandler(ImplementationRequest.type, documentManager, async (document, params) => { + registerNullableCohostHandler(ImplementationRequest.type, documentManager, async (document, params) => { const results = await vscode.commands.executeCommand( 'vscode.executeImplementationProvider', document.uri, params.position ); - return rewriteLocations(results); + return rewriteLocations(results ?? []); }); - registerCohostHandler(DefinitionRequest.type, documentManager, async (document, params) => { + registerNullableCohostHandler(DefinitionRequest.type, documentManager, async (document, params) => { const results = await vscode.commands.executeCommand( 'vscode.executeDefinitionProvider', document.uri, params.position ); - return rewriteLocations(results); + return rewriteLocations(results ?? []); }); - registerCohostHandler(SignatureHelpRequest.type, documentManager, async (document, params) => { + registerNullableCohostHandler(SignatureHelpRequest.type, documentManager, async (document, params) => { const results = await vscode.commands.executeCommand( 'vscode.executeSignatureHelpProvider', document.uri, @@ -166,13 +168,13 @@ export function registerRazorEndpoints( ); if (!results) { - return undefined; + return null; } return rewriteSignatureHelp(results); }); - registerCohostHandler(DocumentFormattingRequest.type, documentManager, async (document, params) => { + registerNullableCohostHandler(DocumentFormattingRequest.type, documentManager, async (document, params) => { const content = document.getContent(); const options = params.options; @@ -180,49 +182,85 @@ export function registerRazorEndpoints( return response?.edits; }); - registerCohostHandler(DocumentOnTypeFormattingRequest.type, documentManager, async (document, params) => { - const content = document.getContent(); - const options = params.options; - - const response = await FormattingHandler.getHtmlOnTypeFormattingResult( - document.uri, - content, - params.position, - params.ch, - options - ); - return response?.edits; - }); + registerNullableCohostHandler( + DocumentOnTypeFormattingRequest.type, + documentManager, + async (document, params) => { + const content = document.getContent(); + const options = params.options; + + const response = await FormattingHandler.getHtmlOnTypeFormattingResult( + document.uri, + content, + params.position, + params.ch, + options + ); + return response?.edits; + } + ); } // Helper method that registers a request handler, and logs errors to the Razor logger. function registerCohostHandler( type: RequestType, documentManager: HtmlDocumentManager, + missingDocumentResult: Result, invocation: (document: HtmlDocument, request: Params) => Promise ) { - return registerMethodHandler, Result | undefined>(type.method, async (params) => { + const forwardedType = new RequestType, Result, Error>( + type.method, + type.parameterStructures + ); + + return registerMethodHandler(forwardedType, async (params) => { const uri = UriConverter.deserialize(params.textDocument.uri); const document = await documentManager.getDocument(uri, params.checksum); if (!document) { - return undefined; + return missingDocumentResult; } return invocation(document, params.request); }); } - function registerMethodHandler(method: string, invocation: (params: Params) => Promise) { - const requestType = new RequestType(method); - roslynLanguageServer.registerOnRequest(requestType, async (params) => { + function registerNullableCohostHandler( + type: RequestType, + documentManager: HtmlDocumentManager, + invocation: (document: HtmlDocument, request: Params) => Promise + ) { + const forwardedType = new RequestType, Result | null, Error>( + type.method, + type.parameterStructures + ); + + return registerMethodHandler(forwardedType, async (params) => { + const uri = UriConverter.deserialize(params.textDocument.uri); + const document = await documentManager.getDocument(uri, params.checksum); + + if (!document) { + return null; + } + + return invocation(document, params.request); + }); + } + + function registerMethodHandler( + type: RequestType, + invocation: (params: Params, token: vscode.CancellationToken) => Promise + ) { + const handler = (async (params: Params, token: vscode.CancellationToken) => { try { - return await invocation(params); + return await invocation(params, token); } catch (error) { razorLogger.logError(`Error: ${error}`, error); - return undefined; + throw error; } - }); + }) as RequestHandler; + + roslynLanguageServer.registerOnRequest(type, handler); } } diff --git a/src/lsptoolshost/razor/showGeneratedDocumentCommand.ts b/src/lsptoolshost/razor/showGeneratedDocumentCommand.ts index f6e93d3033..de5f8afab9 100644 --- a/src/lsptoolshost/razor/showGeneratedDocumentCommand.ts +++ b/src/lsptoolshost/razor/showGeneratedDocumentCommand.ts @@ -8,7 +8,7 @@ import { RazorLanguage } from '../../razor/src/razorLanguage'; import { getUriPath } from '../../razor/src/uriPaths'; import { RoslynLanguageServer } from '../server/roslynLanguageServer'; import { DocumentContentsRequest } from './documentContentsRequest'; -import { CancellationToken, RequestType, TextDocumentIdentifier } from 'vscode-languageserver-protocol'; +import { CancellationToken, RequestType, TextDocumentIdentifier } from 'vscode-languageclient'; import { UriConverter } from '../utils/uriConverter'; import { GeneratedDocumentKind } from './generatedDocumentKind'; diff --git a/src/lsptoolshost/server/roslynLanguageClient.ts b/src/lsptoolshost/server/roslynLanguageClient.ts index 72c315f375..d063636fea 100644 --- a/src/lsptoolshost/server/roslynLanguageClient.ts +++ b/src/lsptoolshost/server/roslynLanguageClient.ts @@ -4,9 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { CancellationToken, MessageSignature } from 'vscode-jsonrpc'; -import { LanguageClient, ServerOptions, State } from 'vscode-languageclient/node'; -import { ErrorHandler, LanguageClientOptions } from 'vscode-languageclient'; +import { LanguageClient, ServerOptions } from 'vscode-languageclient/node'; +import { CancellationToken, ErrorHandler, LanguageClientOptions, MessageSignature, State } from 'vscode-languageclient'; import CompositeDisposable from '../../compositeDisposable'; import { IDisposable } from '../../disposable'; import { languageServerOptions } from '../../shared/options'; diff --git a/src/lsptoolshost/server/roslynLanguageServer.ts b/src/lsptoolshost/server/roslynLanguageServer.ts index d0b3ad85d2..6d0974e298 100644 --- a/src/lsptoolshost/server/roslynLanguageServer.ts +++ b/src/lsptoolshost/server/roslynLanguageServer.ts @@ -6,24 +6,22 @@ import * as vscode from 'vscode'; import * as path from 'path'; import { + CancellationToken, LanguageClientOptions, NotificationHandler, + NotificationHandler0, NotificationType, + PartialResultParams, ProtocolRequestType, -} from 'vscode-languageclient'; -import { - Trace, + RequestHandler, + RequestParam, RequestType, RequestType0, - CancellationToken, - RequestHandler, ResponseError, - NotificationHandler0, - PartialResultParams, State, - Executable, - TransportKind, -} from 'vscode-languageclient/node'; + Trace, +} from 'vscode-languageclient'; +import { Executable, TransportKind } from 'vscode-languageclient/node'; import { PlatformInformation } from '../../shared/platform'; import { readConfigurations } from '../options/configurationMiddleware'; import * as RoslynProtocol from './roslynProtocol'; @@ -398,7 +396,7 @@ export class RoslynLanguageServer { */ public async sendRequest( type: RequestType, - params: Params, + params: RequestParam, token: vscode.CancellationToken ): Promise { if (!this.isRunning()) { @@ -434,7 +432,7 @@ export class RoslynLanguageServer { public async sendRequestWithProgress

( type: ProtocolRequestType, - params: P, + params: RequestParam

, onProgress: (p: PR) => Promise, cancellationToken?: vscode.CancellationToken ): Promise { diff --git a/src/lsptoolshost/server/roslynProtocol.ts b/src/lsptoolshost/server/roslynProtocol.ts index db4f8178c4..d54d74c6c6 100644 --- a/src/lsptoolshost/server/roslynProtocol.ts +++ b/src/lsptoolshost/server/roslynProtocol.ts @@ -12,17 +12,19 @@ import { integer, MessageDirection, MessageType, + NotificationType, PartialResultParams, Position, ProtocolRequestType, Range, + RequestType, + RequestType0, TextDocumentIdentifier, TextDocumentRegistrationOptions, TextEdit, URI, WorkDoneProgressParams, -} from 'vscode-languageserver-protocol'; -import { NotificationType, RequestType, RequestType0 } from 'vscode-jsonrpc'; +} from 'vscode-languageclient'; import { ProjectConfigurationMessage } from '../../shared/projectConfiguration'; export interface VSProjectContextList { @@ -241,16 +243,6 @@ export interface ProjectNeedsRestoreName { projectFilePaths: string[]; } -export interface SourceGeneratorGetRequestParams { - textDocument: TextDocumentIdentifier; - resultId?: string; -} - -export interface SourceGeneratedDocumentText { - text?: string; - resultId?: string; -} - export interface RefreshSourceGeneratorsParams { forceRegeneration: boolean; } @@ -363,18 +355,6 @@ export namespace RestorableProjects { export const type = new RequestType0(method); } -export namespace SourceGeneratorGetTextRequest { - export const method = 'sourceGeneratedDocument/_roslyn_getText'; - export const messageDirection: MessageDirection = MessageDirection.clientToServer; - export const type = new RequestType(method); -} - -export namespace RefreshSourceGeneratedDocumentNotification { - export const method = 'workspace/refreshSourceGeneratedDocument'; - export const messageDirection: MessageDirection = MessageDirection.serverToClient; - export const type = new NotificationType(method); -} - export namespace RefreshSourceGeneratorsNotification { export const method = 'workspace/_roslyn_refreshSourceGenerators'; export const messageDirection: MessageDirection = MessageDirection.clientToServer; diff --git a/src/lsptoolshost/server/serverCommands.ts b/src/lsptoolshost/server/serverCommands.ts index f9637211aa..17cf5914a6 100644 --- a/src/lsptoolshost/server/serverCommands.ts +++ b/src/lsptoolshost/server/serverCommands.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode'; import { RoslynLanguageServer } from '../server/roslynLanguageServer'; import { UriConverter } from '../utils/uriConverter'; -import * as languageClient from 'vscode-languageclient/node'; +import * as languageClient from 'vscode-languageclient'; /** * Register server -> client commands as well as commands that drive the Roslyn Language Server. diff --git a/src/lsptoolshost/solutionSnapshot/ISolutionSnapshotProvider.ts b/src/lsptoolshost/solutionSnapshot/ISolutionSnapshotProvider.ts index 38b018b86a..71ee4a2807 100644 --- a/src/lsptoolshost/solutionSnapshot/ISolutionSnapshotProvider.ts +++ b/src/lsptoolshost/solutionSnapshot/ISolutionSnapshotProvider.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { integer } from 'vscode-languageserver-protocol'; +import { integer } from 'vscode-languageclient'; export interface ISolutionSnapshotProvider { /** diff --git a/src/lsptoolshost/testing/unitTesting.ts b/src/lsptoolshost/testing/unitTesting.ts index d12e0ca47b..333160b490 100644 --- a/src/lsptoolshost/testing/unitTesting.ts +++ b/src/lsptoolshost/testing/unitTesting.ts @@ -6,7 +6,7 @@ import * as fs from 'fs'; import * as path from 'path'; import * as vscode from 'vscode'; -import * as languageClient from 'vscode-languageclient/node'; +import * as languageClient from 'vscode-languageclient'; import { RoslynLanguageServer } from '../server/roslynLanguageServer'; import { RunTestsParams, RunTestsPartialResult, RunTestsRequest, TestProgress } from '../server/roslynProtocol'; import { commonOptions } from '../../shared/options'; diff --git a/src/omnisharp/engines/lspEngine.ts b/src/omnisharp/engines/lspEngine.ts index 9677139daa..793d542ac9 100644 --- a/src/omnisharp/engines/lspEngine.ts +++ b/src/omnisharp/engines/lspEngine.ts @@ -19,9 +19,8 @@ import { Events, OmniSharpServer } from '../server'; import { IEngine } from './IEngine'; import { PlatformInformation } from '../../shared/platform'; import { IHostExecutableResolver } from '../../shared/constants/IHostExecutableResolver'; -import { Command } from 'vscode-languageserver-protocol'; +import { Command, RequestType, Trace } from 'vscode-languageclient'; import { DynamicFeature, LanguageClientOptions, StaticFeature } from 'vscode-languageclient'; -import { RequestType, Trace } from 'vscode-jsonrpc'; import { LanguageClient, ServerOptions } from 'vscode-languageclient/node'; import { SelectionRangeFeature } from 'vscode-languageclient/selectionRange'; import { ColorProviderFeature } from 'vscode-languageclient/colorProvider'; diff --git a/src/omnisharp/features/completionProvider.ts b/src/omnisharp/features/completionProvider.ts index 27324a7a57..14ea102e35 100644 --- a/src/omnisharp/features/completionProvider.ts +++ b/src/omnisharp/features/completionProvider.ts @@ -23,8 +23,11 @@ import { import AbstractProvider from './abstractProvider'; import * as protocol from '../protocol'; import * as serverUtils from '../utils'; -import { CancellationToken } from 'vscode-jsonrpc'; -import { CompletionTriggerKind as LspCompletionTriggerKind, InsertTextFormat } from 'vscode-languageserver-protocol'; +import { + CompletionTriggerKind as LspCompletionTriggerKind, + InsertTextFormat, + CancellationToken, +} from 'vscode-languageclient'; import { createRequest } from '../typeConversion'; import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; import { OmniSharpServer } from '../server'; diff --git a/src/omnisharp/features/fixAllProvider.ts b/src/omnisharp/features/fixAllProvider.ts index 132977fff5..3d612b6b35 100644 --- a/src/omnisharp/features/fixAllProvider.ts +++ b/src/omnisharp/features/fixAllProvider.ts @@ -12,8 +12,8 @@ import CompositeDisposable from '../../compositeDisposable'; import AbstractProvider from './abstractProvider'; import { LanguageMiddlewareFeature } from '../languageMiddlewareFeature'; import { buildEditForResponse } from '../fileOperationsResponseEditBuilder'; -import { CancellationToken } from 'vscode-jsonrpc'; import { showWarningMessage } from '../../shared/observers/utils/showMessage'; +import { CancellationToken } from 'vscode-languageclient'; export class OmniSharpFixAllProvider extends AbstractProvider implements vscode.CodeActionProvider { public static fixAllCodeActionKind = vscode.CodeActionKind.SourceFixAll.append('csharp'); diff --git a/src/omnisharp/features/semanticTokensProvider.ts b/src/omnisharp/features/semanticTokensProvider.ts index 077c869794..d90749eca2 100644 --- a/src/omnisharp/features/semanticTokensProvider.ts +++ b/src/omnisharp/features/semanticTokensProvider.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { SemanticTokenTypes } from 'vscode-languageserver-protocol'; +import { SemanticTokenTypes } from 'vscode-languageclient'; import * as protocol from '../protocol'; import * as serverUtils from '../utils'; import { createRequest, toRange2 } from '../typeConversion'; diff --git a/src/omnisharp/protocol.ts b/src/omnisharp/protocol.ts index ec444e363c..85ddc792e0 100644 --- a/src/omnisharp/protocol.ts +++ b/src/omnisharp/protocol.ts @@ -4,12 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as path from 'path'; -import { - CompletionTriggerKind, - CompletionItemKind, - CompletionItemTag, - InsertTextFormat, -} from 'vscode-languageserver-protocol'; +import { CompletionTriggerKind, CompletionItemKind, CompletionItemTag, InsertTextFormat } from 'vscode-languageclient'; import { findNetCoreTargetFramework, findNetFrameworkTargetFramework, diff --git a/src/omnisharp/utils.ts b/src/omnisharp/utils.ts index 1d28bf6891..09507bf315 100644 --- a/src/omnisharp/utils.ts +++ b/src/omnisharp/utils.ts @@ -6,7 +6,7 @@ import { OmniSharpServer } from './server'; import * as protocol from './protocol'; import * as vscode from 'vscode'; -import { CancellationToken } from 'vscode-languageserver-protocol'; +import { CancellationToken } from 'vscode-languageclient'; import { isWebProject, isBlazorWebAssemblyProject, diff --git a/src/razor/src/colorPresentation/colorPresentationContext.ts b/src/razor/src/colorPresentation/colorPresentationContext.ts index fd2321ffdf..caba64787b 100644 --- a/src/razor/src/colorPresentation/colorPresentationContext.ts +++ b/src/razor/src/colorPresentation/colorPresentationContext.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { Range } from 'vscode-languageserver-types'; +import { Range } from 'vscode-languageclient'; export class ColorPresentationContext { constructor(public readonly uri: vscode.Uri, public readonly range: Range) {} diff --git a/src/razor/src/completion/completionHandler.ts b/src/razor/src/completion/completionHandler.ts index 0c029d04d3..de8d44cd40 100644 --- a/src/razor/src/completion/completionHandler.ts +++ b/src/razor/src/completion/completionHandler.ts @@ -14,7 +14,7 @@ import { Position, Range, TextEdit, -} from 'vscode-languageserver-protocol'; +} from 'vscode-languageclient'; export class CompletionHandler { constructor() {} diff --git a/src/razor/src/folding/foldingRangeHandler.ts b/src/razor/src/folding/foldingRangeHandler.ts index ccd98af65a..64ce67cb27 100644 --- a/src/razor/src/folding/foldingRangeHandler.ts +++ b/src/razor/src/folding/foldingRangeHandler.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { FoldingRange, FoldingRangeKind } from 'vscode-languageserver-protocol'; +import { FoldingRange, FoldingRangeKind } from 'vscode-languageclient'; import { RazorLogger } from '../razorLogger'; export class FoldingRangeHandler { diff --git a/src/razor/src/razorLogger.ts b/src/razor/src/razorLogger.ts index 4b7dbc8447..a86e3dd47f 100644 --- a/src/razor/src/razorLogger.ts +++ b/src/razor/src/razorLogger.ts @@ -7,7 +7,7 @@ import * as fs from 'fs'; import * as path from 'path'; import * as vscodeAdapter from './vscodeAdapter'; import * as vscode from 'vscode'; -import { MessageType } from 'vscode-languageserver-protocol'; +import { MessageType } from 'vscode-languageclient'; export class RazorLogger implements vscodeAdapter.Disposable { public static readonly logName = 'Razor Log'; diff --git a/src/shared/options.ts b/src/shared/options.ts index 7be723a334..5e6ffaeff3 100644 --- a/src/shared/options.ts +++ b/src/shared/options.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { DocumentSelector } from 'vscode-languageserver-protocol'; +import { DocumentSelector } from 'vscode-languageclient'; import * as path from 'path'; export interface CommonOptions { diff --git a/src/shared/utils/combineDocumentSelectors.ts b/src/shared/utils/combineDocumentSelectors.ts index 159201d10a..950045920d 100644 --- a/src/shared/utils/combineDocumentSelectors.ts +++ b/src/shared/utils/combineDocumentSelectors.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { DocumentSelector } from 'vscode-languageserver-protocol/lib/common/protocol'; +import { DocumentSelector } from 'vscode-languageclient'; export function combineDocumentSelectors( ...selectors: (DocumentSelector | vscode.DocumentSelector)[] diff --git a/test/lsptoolshost/integrationTests/codelens.integration.test.ts b/test/lsptoolshost/integrationTests/codelens.integration.test.ts index 26435533f3..7af16faa2c 100644 --- a/test/lsptoolshost/integrationTests/codelens.integration.test.ts +++ b/test/lsptoolshost/integrationTests/codelens.integration.test.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as lsp from 'vscode-languageserver-protocol'; +import * as lsp from 'vscode-languageclient'; import * as vscode from 'vscode'; import * as path from 'path'; import { describe, beforeAll, beforeEach, afterAll, test, expect, afterEach } from '@jest/globals'; diff --git a/test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts b/test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts index a85c1df20a..678023f11f 100644 --- a/test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts +++ b/test/lsptoolshost/integrationTests/lspInlayHints.integration.test.ts @@ -8,7 +8,7 @@ import * as vscode from 'vscode'; import { describe, beforeAll, afterAll, test, expect, beforeEach, afterEach } from '@jest/globals'; import testAssetWorkspace from './testAssets/testAssetWorkspace'; import * as integrationHelpers from './integrationHelpers'; -import { InlayHint, InlayHintKind, Position } from 'vscode-languageserver-protocol'; +import { InlayHint, InlayHintKind, Position } from 'vscode-languageclient'; describe(`Inlay Hints Tests`, () => { beforeAll(async () => { diff --git a/test/lsptoolshost/integrationTests/testHooks.ts b/test/lsptoolshost/integrationTests/testHooks.ts index 3fd6936114..55ac5f9ece 100644 --- a/test/lsptoolshost/integrationTests/testHooks.ts +++ b/test/lsptoolshost/integrationTests/testHooks.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as lsp from 'vscode-languageserver-protocol'; +import * as lsp from 'vscode-languageclient'; export interface WaitForAsyncOperationsParams { /** diff --git a/tsconfig.json b/tsconfig.json index 9aaab4ae38..3307219091 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -21,10 +21,10 @@ "vscode-languageclient/selectionRange": ["./node_modules/vscode-languageclient/lib/common/selectionRange"], "vscode-languageclient/protocolConverter": ["./node_modules/vscode-languageclient/lib/common/protocolConverter"], "vscode-languageclient/node": ["./node_modules/vscode-languageclient/lib/node/main"], - "vscode-languageserver-protocol": ["./node_modules/vscode-languageserver-protocol/lib/common/api"], - "vscode-languageserver-protocol/node": ["./node_modules/vscode-languageserver-protocol/lib/node/main"], + "vscode-languageserver-protocol": ["./node_modules/vscode-languageclient/node_modules/vscode-languageserver-protocol/lib/common/api"], + "vscode-languageserver-protocol/node": ["./node_modules/vscode-languageclient/node_modules/vscode-languageserver-protocol/lib/node/main"], "vscode-jsonrpc": ["./node_modules/vscode-jsonrpc/lib/common/api"], - "vscode-jsonrpc/node": ["./node_modules/vscode-jsonrpc/lib/node/main"] + "vscode-jsonrpc/node": ["./node_modules/vscode-jsonrpc/lib/node/main"], }, "sourceMap": true, "moduleResolution": "node",