Merge pull request #595 from RooVetGit/simpler_apply_diff_speedup

Speed up diff edits
This commit is contained in:
Matt Rubens
2025-01-27 09:42:01 -05:00
committed by GitHub
2 changed files with 18 additions and 16 deletions

View File

@@ -0,0 +1,5 @@
---
"roo-cline": patch
---
Speed up diff editing (thanks @hannesrudolph!)

View File

@@ -88,7 +88,6 @@ export class DiffViewProvider {
if (!isFinal) {
accumulatedLines.pop() // remove the last partial line only if it's not the final update
}
const diffLines = accumulatedLines.slice(this.streamedLines.length)
const diffEditor = this.activeDiffEditor
const document = diffEditor?.document
@@ -100,21 +99,19 @@ export class DiffViewProvider {
const beginningOfDocument = new vscode.Position(0, 0)
diffEditor.selection = new vscode.Selection(beginningOfDocument, beginningOfDocument)
for (let i = 0; i < diffLines.length; i++) {
const currentLine = this.streamedLines.length + i
// Replace all content up to the current line with accumulated lines
// This is necessary (as compared to inserting one line at a time) to handle cases where html tags on previous lines are auto closed for example
const edit = new vscode.WorkspaceEdit()
const rangeToReplace = new vscode.Range(0, 0, currentLine + 1, 0)
const contentToReplace = accumulatedLines.slice(0, currentLine + 1).join("\n") + "\n"
edit.replace(document.uri, rangeToReplace, contentToReplace)
await vscode.workspace.applyEdit(edit)
// Update decorations
this.activeLineController.setActiveLine(currentLine)
this.fadedOverlayController.updateOverlayAfterLine(currentLine, document.lineCount)
// Scroll to the current line
this.scrollEditorToLine(currentLine)
}
const endLine = accumulatedLines.length
// Replace all content up to the current line with accumulated lines
const edit = new vscode.WorkspaceEdit()
const rangeToReplace = new vscode.Range(0, 0, endLine + 1, 0)
const contentToReplace = accumulatedLines.slice(0, endLine + 1).join("\n") + "\n"
edit.replace(document.uri, rangeToReplace, contentToReplace)
await vscode.workspace.applyEdit(edit)
// Update decorations
this.activeLineController.setActiveLine(endLine)
this.fadedOverlayController.updateOverlayAfterLine(endLine, document.lineCount)
// Scroll to the current line
this.scrollEditorToLine(endLine)
// Update the streamedLines with the new accumulated content
this.streamedLines = accumulatedLines
if (isFinal) {