Skip to content

Commit ecb07c2

Browse files
authored
[release] Ignore updates with no changes for csharp files (#8170)
2 parents cc28f41 + 6b7083d commit ecb07c2

File tree

3 files changed

+17
-9
lines changed

3 files changed

+17
-9
lines changed

src/razor/src/document/IRazorDocumentChangeEvent.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6+
import { ServerTextChange } from '../rpc/serverTextChange';
67
import { IRazorDocument } from './IRazorDocument';
78
import { RazorDocumentChangeKind } from './razorDocumentChangeKind';
89

910
export interface IRazorDocumentChangeEvent {
1011
readonly document: IRazorDocument;
1112
readonly kind: RazorDocumentChangeKind;
13+
readonly changes: ServerTextChange[];
1214
}

src/razor/src/document/razorDocumentManager.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { createDocument } from './razorDocumentFactory';
2020
import { razorInitializeCommand } from '../../../lsptoolshost/razor/razorCommands';
2121
import { PlatformInformation } from '../../../shared/platform';
2222
import { v4 as uuidv4 } from 'uuid';
23+
import { ServerTextChange } from '../rpc/serverTextChange';
2324

2425
export class RazorDocumentManager implements IRazorDocumentManager {
2526
public roslynActivated = false;
@@ -158,7 +159,7 @@ export class RazorDocumentManager implements IRazorDocumentManager {
158159

159160
const document = this._getDocument(uri);
160161

161-
this.notifyDocumentChange(document, RazorDocumentChangeKind.opened);
162+
this.notifyDocumentChange(document, RazorDocumentChangeKind.opened, []);
162163
}
163164

164165
public async ensureRazorInitialized() {
@@ -189,7 +190,7 @@ export class RazorDocumentManager implements IRazorDocumentManager {
189190
}
190191
}
191192

192-
this.notifyDocumentChange(document, RazorDocumentChangeKind.closed);
193+
this.notifyDocumentChange(document, RazorDocumentChangeKind.closed, []);
193194
}
194195

195196
private addDocument(uri: vscode.Uri): IRazorDocument {
@@ -203,7 +204,7 @@ export class RazorDocumentManager implements IRazorDocumentManager {
203204
document = createDocument(uri);
204205
this.razorDocuments[document.path] = document;
205206

206-
this.notifyDocumentChange(document, RazorDocumentChangeKind.added);
207+
this.notifyDocumentChange(document, RazorDocumentChangeKind.added, []);
207208

208209
return document;
209210
}
@@ -212,7 +213,7 @@ export class RazorDocumentManager implements IRazorDocumentManager {
212213
const document = this._getDocument(uri);
213214
delete this.razorDocuments[document.path];
214215

215-
this.notifyDocumentChange(document, RazorDocumentChangeKind.removed);
216+
this.notifyDocumentChange(document, RazorDocumentChangeKind.removed, []);
216217
}
217218

218219
private findDocument(path: string) {
@@ -267,7 +268,7 @@ export class RazorDocumentManager implements IRazorDocumentManager {
267268
updateBufferRequest.encodingCodePage
268269
);
269270

270-
this.notifyDocumentChange(document, RazorDocumentChangeKind.csharpChanged);
271+
this.notifyDocumentChange(document, RazorDocumentChangeKind.csharpChanged, updateBufferRequest.changes);
271272
} else {
272273
this.logger.logWarning(
273274
'Failed to update the C# document buffer. This is unexpected and may result in incorrect C# interactions.'
@@ -310,24 +311,27 @@ export class RazorDocumentManager implements IRazorDocumentManager {
310311

311312
htmlProjectedDocument.update(updateBufferRequest.changes, updateBufferRequest.hostDocumentVersion);
312313

313-
this.notifyDocumentChange(document, RazorDocumentChangeKind.htmlChanged);
314+
this.notifyDocumentChange(document, RazorDocumentChangeKind.htmlChanged, updateBufferRequest.changes);
314315
} else {
315316
this.logger.logWarning(
316317
'Failed to update the HTML document buffer. This is unexpected and may result in incorrect HTML interactions.'
317318
);
318319
}
319320
}
320321

321-
private notifyDocumentChange(document: IRazorDocument, kind: RazorDocumentChangeKind) {
322+
private notifyDocumentChange(document: IRazorDocument, kind: RazorDocumentChangeKind, changes: ServerTextChange[]) {
322323
if (this.logger.verboseEnabled) {
323324
this.logger.logVerbose(
324-
`Notifying document '${getUriPath(document.uri)}' changed '${RazorDocumentChangeKind[kind]}'`
325+
`Notifying document '${getUriPath(document.uri)}' changed '${RazorDocumentChangeKind[kind]}' with '${
326+
changes.length
327+
}' changes.`
325328
);
326329
}
327330

328331
const args: IRazorDocumentChangeEvent = {
329332
document,
330333
kind,
334+
changes,
331335
};
332336

333337
this.onChangeEmitter.fire(args);

src/razor/src/dynamicFile/dynamicFileInfoHandler.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ export class DynamicFileInfoHandler {
4040
}
4141
);
4242
this.documentManager.onChange(async (e) => {
43-
if (e.kind == RazorDocumentChangeKind.csharpChanged && !e.document.isOpen) {
43+
// Ignore any updates without text changes. This is important for perf since sending an update to roslyn does
44+
// a round trip for producing nothing new and causes a lot of churn in solution updates.
45+
if (e.kind == RazorDocumentChangeKind.csharpChanged && !e.document.isOpen && e.changes.length > 0) {
4446
const uriString = UriConverter.serialize(e.document.uri);
4547
const identifier = TextDocumentIdentifier.create(uriString);
4648
await vscode.commands.executeCommand(

0 commit comments

Comments
 (0)