@@ -10,6 +10,9 @@ import { TextDocumentIdentifier } from 'vscode-languageserver-protocol';
1010import { UriConverter } from '../uriConverter' ;
1111import { LanguageServerEvents } from '../languageServerEvents' ;
1212import { ServerState } from '../serverStateChange' ;
13+ import { DynamicFileInfoHandler } from '../../razor/src/dynamicFile/dynamicFileInfoHandler' ;
14+ import { ProvideDynamicFileResponse } from '../../razor/src/dynamicFile/provideDynamicFileResponse' ;
15+ import { ProvideDynamicFileParams } from '../../razor/src/dynamicFile/provideDynamicFileParams' ;
1316
1417export interface ProjectContextChangeEvent {
1518 uri : vscode . Uri ;
@@ -39,11 +42,22 @@ export class ProjectContextService {
3942
4043 public async refresh ( ) {
4144 const textEditor = vscode . window . activeTextEditor ;
42- if ( textEditor ?. document ?. languageId !== 'csharp' ) {
45+ const languageId = textEditor ?. document ?. languageId ;
46+ if ( languageId !== 'csharp' && languageId !== 'aspnetcorerazor' ) {
4347 return ;
4448 }
4549
46- const uri = textEditor . document . uri ;
50+ let uri = textEditor ! . document . uri ;
51+
52+ // If the active document is a Razor file, we need to map it back to a C# file.
53+ if ( languageId === 'aspnetcorerazor' ) {
54+ const virtualUri = await this . getVirtualCSharpUri ( uri ) ;
55+ if ( ! virtualUri ) {
56+ return ;
57+ }
58+
59+ uri = virtualUri ;
60+ }
4761
4862 // If we have an open request, cancel it.
4963 this . _source . cancel ( ) ;
@@ -58,6 +72,20 @@ export class ProjectContextService {
5872 this . _contextChangeEmitter . fire ( { uri, context } ) ;
5973 }
6074
75+ private async getVirtualCSharpUri ( uri : vscode . Uri ) : Promise < vscode . Uri | undefined > {
76+ const response = await vscode . commands . executeCommand < ProvideDynamicFileResponse > (
77+ DynamicFileInfoHandler . provideDynamicFileInfoCommand ,
78+ new ProvideDynamicFileParams ( [ uri . fsPath ] )
79+ ) ;
80+
81+ const responseUri = response . generatedFiles [ 0 ] ;
82+ if ( ! responseUri ) {
83+ return undefined ;
84+ }
85+
86+ return UriConverter . deserialize ( responseUri ) ;
87+ }
88+
6189 private async getProjectContexts (
6290 uri : vscode . Uri ,
6391 token : vscode . CancellationToken
0 commit comments