@@ -10,6 +10,9 @@ import { TextDocumentIdentifier } from 'vscode-languageserver-protocol';
10
10
import { UriConverter } from '../uriConverter' ;
11
11
import { LanguageServerEvents } from '../languageServerEvents' ;
12
12
import { 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' ;
13
16
14
17
export interface ProjectContextChangeEvent {
15
18
uri : vscode . Uri ;
@@ -39,11 +42,22 @@ export class ProjectContextService {
39
42
40
43
public async refresh ( ) {
41
44
const textEditor = vscode . window . activeTextEditor ;
42
- if ( textEditor ?. document ?. languageId !== 'csharp' ) {
45
+ const languageId = textEditor ?. document ?. languageId ;
46
+ if ( languageId !== 'csharp' && languageId !== 'aspnetcorerazor' ) {
43
47
return ;
44
48
}
45
49
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
+ }
47
61
48
62
// If we have an open request, cancel it.
49
63
this . _source . cancel ( ) ;
@@ -58,6 +72,20 @@ export class ProjectContextService {
58
72
this . _contextChangeEmitter . fire ( { uri, context } ) ;
59
73
}
60
74
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
+
61
89
private async getProjectContexts (
62
90
uri : vscode . Uri ,
63
91
token : vscode . CancellationToken
0 commit comments