Skip to content

Commit dca6632

Browse files
committed
Add endpoint for updating Html documents
1 parent 377e8d5 commit dca6632

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

src/lsptoolshost/activate.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ export async function activateRoslynLanguageServer(
8686
registerCodeActionFixAllCommands(context, languageServer, _channel);
8787

8888
registerRazorCommands(context, languageServer);
89-
registerRazorEndpoints(context, languageServer, razorLogger);
89+
registerRazorEndpoints(context, languageServer, razorLogger, platformInfo);
9090

9191
registerUnitTestingCommands(context, languageServer);
9292

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { TextDocumentIdentifier } from 'vscode-languageserver-protocol';
7+
8+
export class HtmlUpdateParameters {
9+
constructor(public readonly textDocument: TextDocumentIdentifier, public readonly text: string) {}
10+
}

src/lsptoolshost/razor/razorEndpoints.ts

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,47 @@
55

66
import { RoslynLanguageServer } from '../server/roslynLanguageServer';
77
import * as vscode from 'vscode';
8-
import { LogMessageParams, NotificationType } from 'vscode-languageclient';
8+
import { LogMessageParams, NotificationType, RequestType } from 'vscode-languageclient';
99
import { RazorLogger } from '../../razor/src/razorLogger';
10+
import { HtmlUpdateParameters } from './htmlUpdateParameters';
11+
import { UriConverter } from '../utils/uriConverter';
12+
import { PlatformInformation } from '../../shared/platform';
13+
import { HtmlDocumentManager } from './htmlDocumentManager';
14+
import { razorOptions } from '../../shared/options';
1015

1116
export function registerRazorEndpoints(
1217
context: vscode.ExtensionContext,
1318
languageServer: RoslynLanguageServer,
14-
razorLogger: RazorLogger
19+
razorLogger: RazorLogger,
20+
platformInfo: PlatformInformation
1521
) {
1622
const logNotificationType = new NotificationType<LogMessageParams>('razor/log');
1723
languageServer.registerOnNotificationWithParams(logNotificationType, (params) =>
1824
razorLogger.log(params.message, params.type)
1925
);
26+
27+
if (!razorOptions.cohostingEnabled) {
28+
return;
29+
}
30+
31+
const documentManager = new HtmlDocumentManager(platformInfo, razorLogger);
32+
context.subscriptions.push(documentManager.register());
33+
34+
registerRequestHandler<HtmlUpdateParameters, void>('razor/updateHtml', async (params) => {
35+
const uri = UriConverter.deserialize(params.textDocument.uri);
36+
await documentManager.updateDocumentText(uri, params.text);
37+
});
38+
39+
// Helper method that registers a request handler, and logs errors to the Razor logger.
40+
function registerRequestHandler<Params, Result>(method: string, invocation: (params: Params) => Promise<Result>) {
41+
const requestType = new RequestType<Params, Result, Error>(method);
42+
languageServer.registerOnRequest(requestType, async (params) => {
43+
try {
44+
return await invocation(params);
45+
} catch (error) {
46+
razorLogger.logError(`Error: ${error}`, error);
47+
return undefined;
48+
}
49+
});
50+
}
2051
}

0 commit comments

Comments
 (0)