diff --git a/Extension/src/LanguageServer/extension.ts b/Extension/src/LanguageServer/extension.ts index 6cc1232d5f..8950975987 100644 --- a/Extension/src/LanguageServer/extension.ts +++ b/Extension/src/LanguageServer/extension.ts @@ -172,8 +172,13 @@ export async function activate(): Promise { getCustomConfigProviders().forEach(provider => void client.onRegisterCustomConfigurationProvider(provider)); }); - disposables.push(vscode.workspace.onDidChangeConfiguration(onDidChangeSettings)); + // These handlers for didChangeTextDocument and didOpenTextDocument are intentionally synchronous and are + // intended primarily to maintain openFileVersions with the most recent versions of files, as quickly as + // possible, without being delayed by awaits or queued behind other LSP messages, etc.. disposables.push(vscode.workspace.onDidChangeTextDocument(onDidChangeTextDocument)); + disposables.push(vscode.workspace.onDidOpenTextDocument(onDidOpenTextDocument)); + + disposables.push(vscode.workspace.onDidChangeConfiguration(onDidChangeSettings)); disposables.push(vscode.window.onDidChangeTextEditorVisibleRanges((e) => clients.ActiveClient.enqueue(async () => onDidChangeTextEditorVisibleRanges(e)))); disposables.push(vscode.window.onDidChangeActiveTextEditor((e) => clients.ActiveClient.enqueue(async () => onDidChangeActiveTextEditor(e)))); ui.didChangeActiveEditor(); // Handle already active documents (for non-cpp files that we don't register didOpen). @@ -303,6 +308,11 @@ function onDidChangeTextDocument(event: vscode.TextDocumentChangeEvent): void { me.onDidChangeTextDocument(event); } +function onDidOpenTextDocument(document: vscode.TextDocument): void { + const me: Client = clients.getClientFor(document.uri); + me.onDidOpenTextDocument(document); +} + let noActiveEditorTimeout: NodeJS.Timeout | undefined; async function onDidChangeTextEditorVisibleRanges(event: vscode.TextEditorVisibleRangesChangeEvent): Promise { diff --git a/Extension/src/LanguageServer/protocolFilter.ts b/Extension/src/LanguageServer/protocolFilter.ts index 9829f0a138..372d62e3a9 100644 --- a/Extension/src/LanguageServer/protocolFilter.ts +++ b/Extension/src/LanguageServer/protocolFilter.ts @@ -38,7 +38,6 @@ export function createProtocolFilter(): Middleware { return; } // client.takeOwnership() will call client.TrackedDocuments.add() again, but that's ok. It's a Set. - client.onDidOpenTextDocument(document); client.takeOwnership(document); void sendMessage(document); }