@@ -9,6 +9,7 @@ import { HtmlProjectedDocument } from '../html/htmlProjectedDocument';
9
9
import { RazorLanguage } from '../razorLanguage' ;
10
10
import { RazorLanguageServerClient } from '../razorLanguageServerClient' ;
11
11
import { RazorLogger } from '../razorLogger' ;
12
+ import { TelemetryReporter } from '../telemetryReporter' ;
12
13
import { UpdateBufferRequest } from '../rpc/updateBufferRequest' ;
13
14
import { getUriPath } from '../uriPaths' ;
14
15
import { IRazorDocument } from './IRazorDocument' ;
@@ -28,7 +29,11 @@ export class RazorDocumentManager implements IRazorDocumentManager {
28
29
29
30
public razorDocumentGenerationInitialized = false ;
30
31
31
- constructor ( private readonly serverClient : RazorLanguageServerClient , private readonly logger : RazorLogger ) { }
32
+ constructor (
33
+ private readonly serverClient : RazorLanguageServerClient ,
34
+ private readonly logger : RazorLogger ,
35
+ private readonly telemetryReporter : TelemetryReporter
36
+ ) { }
32
37
33
38
public get onChange ( ) {
34
39
return this . onChangeEmitter . event ;
@@ -227,6 +232,7 @@ export class RazorDocumentManager implements IRazorDocumentManager {
227
232
const projectedDocument = document . csharpDocument ;
228
233
229
234
if (
235
+ updateBufferRequest . previousWasEmpty ||
230
236
! projectedDocument . hostDocumentSyncVersion ||
231
237
projectedDocument . hostDocumentSyncVersion <= updateBufferRequest . hostDocumentVersion
232
238
) {
@@ -237,6 +243,15 @@ export class RazorDocumentManager implements IRazorDocumentManager {
237
243
await vscode . workspace . openTextDocument ( document . csharpDocument . uri ) ;
238
244
239
245
const csharpProjectedDocument = projectedDocument as CSharpProjectedDocument ;
246
+
247
+ // If the language server is telling us that the previous document was empty, then we should clear
248
+ // ours out. Hopefully ours would have been empty too, but there are cases where things get out of
249
+ // sync
250
+ if ( updateBufferRequest . previousWasEmpty && projectedDocument . length !== 0 ) {
251
+ this . telemetryReporter . reportBuffersOutOfSync ( ) ;
252
+ csharpProjectedDocument . clear ( ) ;
253
+ }
254
+
240
255
csharpProjectedDocument . update ( updateBufferRequest . changes , updateBufferRequest . hostDocumentVersion ) ;
241
256
242
257
this . notifyDocumentChange ( document , RazorDocumentChangeKind . csharpChanged ) ;
@@ -260,6 +275,7 @@ export class RazorDocumentManager implements IRazorDocumentManager {
260
275
const projectedDocument = document . htmlDocument ;
261
276
262
277
if (
278
+ updateBufferRequest . previousWasEmpty ||
263
279
! projectedDocument . hostDocumentSyncVersion ||
264
280
projectedDocument . hostDocumentSyncVersion <= updateBufferRequest . hostDocumentVersion
265
281
) {
@@ -270,6 +286,15 @@ export class RazorDocumentManager implements IRazorDocumentManager {
270
286
await vscode . workspace . openTextDocument ( document . htmlDocument . uri ) ;
271
287
272
288
const htmlProjectedDocument = projectedDocument as HtmlProjectedDocument ;
289
+
290
+ // If the language server is telling us that the previous document was empty, then we should clear
291
+ // ours out. Hopefully ours would have been empty too, but there are cases where things get out of
292
+ // sync
293
+ if ( updateBufferRequest . previousWasEmpty && projectedDocument . length !== 0 ) {
294
+ this . telemetryReporter . reportBuffersOutOfSync ( ) ;
295
+ htmlProjectedDocument . clear ( ) ;
296
+ }
297
+
273
298
htmlProjectedDocument . update ( updateBufferRequest . changes , updateBufferRequest . hostDocumentVersion ) ;
274
299
275
300
this . notifyDocumentChange ( document , RazorDocumentChangeKind . htmlChanged ) ;
0 commit comments