diff --git a/Extension/src/LanguageServer/client.ts b/Extension/src/LanguageServer/client.ts index 1b33615b0..0f14b8fd7 100644 --- a/Extension/src/LanguageServer/client.ts +++ b/Extension/src/LanguageServer/client.ts @@ -28,7 +28,7 @@ import * as fs from 'fs'; import * as os from 'os'; import { SourceFileConfiguration, SourceFileConfigurationItem, Version, WorkspaceBrowseConfiguration } from 'vscode-cpptools'; import { IntelliSenseStatus, Status } from 'vscode-cpptools/out/testApi'; -import { CloseAction, DidOpenTextDocumentParams, ErrorAction, LanguageClientOptions, NotificationType, Position, Range, RequestType, ResponseError, TextDocumentIdentifier, TextDocumentPositionParams } from 'vscode-languageclient'; +import { CloseAction, ErrorAction, LanguageClientOptions, NotificationType, Position, Range, RequestType, ResponseError, TextDocumentIdentifier, TextDocumentPositionParams } from 'vscode-languageclient'; import { LanguageClient, ServerOptions } from 'vscode-languageclient/node'; import * as nls from 'vscode-nls'; import { DebugConfigurationProvider } from '../Debugger/configurationProvider'; @@ -590,6 +590,18 @@ export interface CopilotCompletionContextParams { doAggregateSnippets: boolean; } +export interface TextDocumentItemWithOriginalEncoding { + uri: string; + languageId: string; + version: number; + text: string; + originalEncoding: string; +} + +export interface DidOpenTextDocumentParamsWithOriginalEncoding { + textDocument: TextDocumentItemWithOriginalEncoding; +} + // Requests const PreInitializationRequest: RequestType = new RequestType('cpptools/preinitialize'); const InitializationRequest: RequestType = new RequestType('cpptools/initialize'); @@ -614,7 +626,7 @@ const CppContextRequest: RequestType = new RequestType('cpptools/getCompletionContext'); // Notifications to the server -const DidOpenNotification: NotificationType = new NotificationType('textDocument/didOpen'); +const DidOpenNotification: NotificationType = new NotificationType('cpptools/didOpen'); const FileCreatedNotification: NotificationType = new NotificationType('cpptools/fileCreated'); const FileChangedNotification: NotificationType = new NotificationType('cpptools/fileChanged'); const FileDeletedNotification: NotificationType = new NotificationType('cpptools/fileDeleted'); @@ -2327,12 +2339,13 @@ export class DefaultClient implements Client { // Only used in crash recovery. Otherwise, VS Code sends didOpen directly to native process (through the protocolFilter). public async sendDidOpen(document: vscode.TextDocument): Promise { - const params: DidOpenTextDocumentParams = { + const params: DidOpenTextDocumentParamsWithOriginalEncoding = { textDocument: { uri: document.uri.toString(), languageId: document.languageId, version: document.version, - text: document.getText() + text: document.getText(), + originalEncoding: document.encoding } }; await this.ready; diff --git a/Extension/src/LanguageServer/protocolFilter.ts b/Extension/src/LanguageServer/protocolFilter.ts index d6462072e..f87eee070 100644 --- a/Extension/src/LanguageServer/protocolFilter.ts +++ b/Extension/src/LanguageServer/protocolFilter.ts @@ -19,7 +19,7 @@ export const ServerCancelled: number = -32802; export function createProtocolFilter(): Middleware { return { - didOpen: async (document, sendMessage) => { + didOpen: async (document, _sendMessage) => { if (!util.isCpp(document)) { return; } @@ -44,8 +44,8 @@ export function createProtocolFilter(): Middleware { } // client.takeOwnership() will call client.TrackedDocuments.add() again, but that's ok. It's a Set. client.takeOwnership(document); - void sendMessage(document); client.ready.then(() => { + client.sendDidOpen(document).catch(logAndReturn.undefined); const cppEditors: vscode.TextEditor[] = vscode.window.visibleTextEditors.filter(e => util.isCpp(e.document)); client.onDidChangeVisibleTextEditors(cppEditors).catch(logAndReturn.undefined); }).catch(logAndReturn.undefined);