From f618e569ab478920022a93a8a3deab2520326d09 Mon Sep 17 00:00:00 2001 From: Gal Schlezinger Date: Sat, 28 Jun 2025 14:01:10 +0300 Subject: optimize edit-tool rendering (#463) Co-authored-by: opencode Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com> --- packages/tui/internal/components/diff/diff.go | 32 +++++++++++++++++++-------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'packages/tui/internal/components/diff') diff --git a/packages/tui/internal/components/diff/diff.go b/packages/tui/internal/components/diff/diff.go index 9475c1f19..4b5c62008 100644 --- a/packages/tui/internal/components/diff/diff.go +++ b/packages/tui/internal/components/diff/diff.go @@ -8,6 +8,7 @@ import ( "regexp" "strconv" "strings" + "sync" "github.com/alecthomas/chroma/v2" "github.com/alecthomas/chroma/v2/formatters" @@ -19,6 +20,7 @@ import ( "github.com/sergi/go-diff/diffmatchpatch" stylesi "github.com/sst/opencode/internal/styles" "github.com/sst/opencode/internal/theme" + "github.com/sst/opencode/internal/util" ) // ------------------------------------------------------------------------- @@ -939,11 +941,22 @@ func RenderSideBySideHunk(fileName string, h Hunk, opts ...SideBySideOption) str leftWidth := colWidth rightWidth := config.TotalWidth - colWidth var sb strings.Builder - for _, p := range pairs { - leftStr := renderLeftColumn(fileName, p.left, leftWidth) - rightStr := renderRightColumn(fileName, p.right, rightWidth) - sb.WriteString(leftStr + rightStr + "\n") - } + + util.WriteStringsPar(&sb, pairs, func(p linePair) string { + wg := &sync.WaitGroup{} + var leftStr, rightStr string + wg.Add(2) + go func() { + defer wg.Done() + leftStr = renderLeftColumn(fileName, p.left, leftWidth) + }() + go func() { + defer wg.Done() + rightStr = renderRightColumn(fileName, p.right, rightWidth) + }() + wg.Wait() + return leftStr + rightStr + "\n" + }) return sb.String() } @@ -957,7 +970,8 @@ func FormatUnifiedDiff(filename string, diffText string, opts ...UnifiedOption) var sb strings.Builder for _, h := range diffResult.Hunks { - sb.WriteString(RenderUnifiedHunk(filename, h, opts...)) + unifiedDiff := RenderUnifiedHunk(filename, h, opts...) + sb.WriteString(unifiedDiff) } return sb.String(), nil @@ -973,7 +987,7 @@ func FormatDiff(filename string, diffText string, opts ...SideBySideOption) (str var sb strings.Builder // config := NewSideBySideConfig(opts...) - for _, h := range diffResult.Hunks { + util.WriteStringsPar(&sb, diffResult.Hunks, func(h Hunk) string { // sb.WriteString( // lipgloss.NewStyle(). // Background(t.DiffHunkHeader()). @@ -981,8 +995,8 @@ func FormatDiff(filename string, diffText string, opts ...SideBySideOption) (str // Width(config.TotalWidth). // Render(h.Header) + "\n", // ) - sb.WriteString(RenderSideBySideHunk(filename, h, opts...)) - } + return RenderSideBySideHunk(filename, h, opts...) + }) return sb.String(), nil } -- cgit v1.2.3