diff options
| author | Gal Schlezinger <[email protected]> | 2025-06-28 14:01:10 +0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-06-28 06:01:10 -0500 |
| commit | f618e569ab478920022a93a8a3deab2520326d09 (patch) | |
| tree | e10c47e314891cf8b2ba5818dec0b5d05b14e7a2 /packages/tui/internal/components/diff/diff.go | |
| parent | 7b394b91e2b40d526b36b3d468445ed1726bb297 (diff) | |
| download | opencode-f618e569ab478920022a93a8a3deab2520326d09.tar.gz opencode-f618e569ab478920022a93a8a3deab2520326d09.zip | |
optimize edit-tool rendering (#463)
Co-authored-by: opencode <[email protected]>
Co-authored-by: Adam <[email protected]>
Diffstat (limited to 'packages/tui/internal/components/diff/diff.go')
| -rw-r--r-- | packages/tui/internal/components/diff/diff.go | 32 |
1 files changed, 23 insertions, 9 deletions
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 } |
