From 66cd9822f5715aad98e78e35066282aba861e6fa Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Tue, 10 Jun 2025 15:15:33 -0300 Subject: [PATCH] fix(diffview): fix small bug when width is very small --- internal/exp/diffview/diffview.go | 49 ++++++++++++++----- .../Split/DarkMode/WidthOf009.golden | 2 +- .../Split/DarkMode/WidthOf010.golden | 2 +- .../Split/LightMode/WidthOf009.golden | 2 +- .../Split/LightMode/WidthOf010.golden | 2 +- 5 files changed, 40 insertions(+), 17 deletions(-) diff --git a/internal/exp/diffview/diffview.go b/internal/exp/diffview/diffview.go index d14152bcb5dede1b6eb681b8897c7ac3d8987aa7..7bc4206d969bb743f419949683f706c249e10c86 100644 --- a/internal/exp/diffview/diffview.go +++ b/internal/exp/diffview/diffview.go @@ -286,6 +286,8 @@ func (dv *DiffView) resizeCodeWidth() { func (dv *DiffView) renderUnified() string { var b strings.Builder + fullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth) + for _, h := range dv.unified.Hunks { if dv.lineNumbers { b.WriteString(dv.style.DividerLine.LineNumber.Render(pad("…", dv.beforeNumDigits))) @@ -308,7 +310,9 @@ func (dv *DiffView) renderUnified() string { b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits))) b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits))) } - b.WriteString(dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" " + content)) + b.WriteString(fullContentStyle.Render( + dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" " + content), + )) beforeLine++ afterLine++ case udiff.Insert: @@ -316,16 +320,20 @@ func (dv *DiffView) renderUnified() string { b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(" ", dv.beforeNumDigits))) b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits))) } - b.WriteString(dv.style.InsertLine.Symbol.Render("+ ")) - b.WriteString(dv.style.InsertLine.Code.Width(dv.codeWidth).Render(content)) + b.WriteString(fullContentStyle.Render( + dv.style.InsertLine.Symbol.Render("+ ") + + dv.style.InsertLine.Code.Width(dv.codeWidth).Render(content), + )) afterLine++ case udiff.Delete: if dv.lineNumbers { b.WriteString(dv.style.DeleteLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits))) b.WriteString(dv.style.DeleteLine.LineNumber.Render(pad(" ", dv.afterNumDigits))) } - b.WriteString(dv.style.DeleteLine.Symbol.Render("- ")) - b.WriteString(dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(content)) + b.WriteString(fullContentStyle.Render( + dv.style.DeleteLine.Symbol.Render("- ") + + dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(content), + )) beforeLine++ } b.WriteRune('\n') @@ -339,6 +347,9 @@ func (dv *DiffView) renderUnified() string { func (dv *DiffView) renderSplit() string { var b strings.Builder + beforeFullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth) + afterFullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth + btoi(dv.extraColOnAfter)) + for i, h := range dv.splitHunks { if dv.lineNumbers { b.WriteString(dv.style.DividerLine.LineNumber.Render(pad("…", dv.beforeNumDigits))) @@ -371,19 +382,25 @@ func (dv *DiffView) renderSplit() string { if dv.lineNumbers { b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.beforeNumDigits))) } - b.WriteString(dv.style.MissingLine.Code.Width(dv.fullCodeWidth).Render(" ")) + b.WriteString(beforeFullContentStyle.Render( + dv.style.MissingLine.Code.Width(dv.fullCodeWidth).Render(" "), + )) case l.before.Kind == udiff.Equal: if dv.lineNumbers { b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits))) } - b.WriteString(dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" " + beforeContent)) + b.WriteString(beforeFullContentStyle.Render( + dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" " + beforeContent), + )) beforeLine++ case l.before.Kind == udiff.Delete: if dv.lineNumbers { b.WriteString(dv.style.DeleteLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits))) } - b.WriteString(dv.style.DeleteLine.Symbol.Render("- ")) - b.WriteString(dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(beforeContent)) + b.WriteString(beforeFullContentStyle.Render( + dv.style.DeleteLine.Symbol.Render("- ") + + dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(beforeContent), + )) beforeLine++ } @@ -392,19 +409,25 @@ func (dv *DiffView) renderSplit() string { if dv.lineNumbers { b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.afterNumDigits))) } - b.WriteString(dv.style.MissingLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" ")) + b.WriteString(afterFullContentStyle.Render( + dv.style.MissingLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "), + )) case l.after.Kind == udiff.Equal: if dv.lineNumbers { b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits))) } - b.WriteString(dv.style.EqualLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" " + afterContent)) + b.WriteString(afterFullContentStyle.Render( + dv.style.EqualLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" " + afterContent), + )) afterLine++ case l.after.Kind == udiff.Insert: if dv.lineNumbers { b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits))) } - b.WriteString(dv.style.InsertLine.Symbol.Render("+ ")) - b.WriteString(dv.style.InsertLine.Code.Width(dv.codeWidth + btoi(dv.extraColOnAfter)).Render(afterContent)) + b.WriteString(afterFullContentStyle.Render( + dv.style.InsertLine.Symbol.Render("+ ") + + dv.style.InsertLine.Code.Width(dv.codeWidth+btoi(dv.extraColOnAfter)).Render(afterContent), + )) afterLine++ } diff --git a/internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf009.golden b/internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf009.golden index 492b2a9752bfc766e2fe6b649f19d2315f3b3a20..15cc518f312e49a25a492cf9d178a051dcf94b3d 100644 --- a/internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf009.golden +++ b/internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf009.golden @@ -10,6 +10,6 @@   9   10   10   11   11   12  - 12 -  13 + 12 - 13       14   13   15  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf010.golden b/internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf010.golden index 08015f590123b93c52341af11ca85d5fa67030d5..95e3d48a33d0abb5a94218d2fcfe29dd3c27fcbc 100644 --- a/internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf010.golden +++ b/internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf010.golden @@ -10,6 +10,6 @@   9   10    10   11    11   12   - 12 -  13  + 12 - 13 +      14 +  13   15   \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf009.golden b/internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf009.golden index 7fc162af8586a55b5b3f89782d5ebf608a6a4a75..47170f9836acbbe16f1de1fc739b1a9e32924ebf 100644 --- a/internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf009.golden +++ b/internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf009.golden @@ -10,6 +10,6 @@   9   10   10   11   11   12  - 12 -  13 + 12 - 13       14   13   15  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf010.golden b/internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf010.golden index 41828b4edca8816b1de26248b20e65f11e7abebb..7de1ab70c01b038036944c1be33703eaa3ee69e2 100644 --- a/internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf010.golden +++ b/internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf010.golden @@ -10,6 +10,6 @@   9   10    10   11    11   12   - 12 -  13  + 12 - 13 +      14 +  13   15   \ No newline at end of file