on main help sign in
fix(diffview): fix small bug when width is very small
commit66cd9822f5715aad98e78e35066282aba861e6fa authorAndrey Nering <andreynering@users.noreply.github.com> dateTue 10 Jun 2025, 15:15 (1 year ago) parenta5a1ba2
5 files changed+40−17
internal/exp/diffview/diffview.go+36−13 internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf009.golden+1−1 internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf010.golden+1−1 internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf009.golden+1−1 internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf010.golden+1−1
internal/exp/diffview/diffview.go+36−13
@@ -286,6 +286,8 @@ func (dv *DiffView) resizeCodeWidth() {
286286func (dv *DiffView) renderUnified() string {
287287 var b strings.Builder
288288
289+ fullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth)
290+
289291 for _, h := range dv.unified.Hunks {
290292 if dv.lineNumbers {
291293 b.WriteString(dv.style.DividerLine.LineNumber.Render(pad("…", dv.beforeNumDigits)))
@@ -308,7 +310,9 @@ func (dv *DiffView) renderUnified() string {
308310 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
309311 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
310312 }
311− b.WriteString(dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" " + content))
313+ b.WriteString(fullContentStyle.Render(
314+ dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" " + content),
315+ ))
312316 beforeLine++
313317 afterLine++
314318 case udiff.Insert:
@@ -316,16 +320,20 @@ func (dv *DiffView) renderUnified() string {
316320 b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
317321 b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
318322 }
319− b.WriteString(dv.style.InsertLine.Symbol.Render("+ "))
320− b.WriteString(dv.style.InsertLine.Code.Width(dv.codeWidth).Render(content))
323+ b.WriteString(fullContentStyle.Render(
324+ dv.style.InsertLine.Symbol.Render("+ ") +
325+ dv.style.InsertLine.Code.Width(dv.codeWidth).Render(content),
326+ ))
321327 afterLine++
322328 case udiff.Delete:
323329 if dv.lineNumbers {
324330 b.WriteString(dv.style.DeleteLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
325331 b.WriteString(dv.style.DeleteLine.LineNumber.Render(pad(" ", dv.afterNumDigits)))
326332 }
327− b.WriteString(dv.style.DeleteLine.Symbol.Render("- "))
328− b.WriteString(dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(content))
333+ b.WriteString(fullContentStyle.Render(
334+ dv.style.DeleteLine.Symbol.Render("- ") +
335+ dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(content),
336+ ))
329337 beforeLine++
330338 }
331339 b.WriteRune('\n')
@@ -339,6 +347,9 @@ func (dv *DiffView) renderUnified() string {
339347func (dv *DiffView) renderSplit() string {
340348 var b strings.Builder
341349
350+ beforeFullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth)
351+ afterFullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth + btoi(dv.extraColOnAfter))
352+
342353 for i, h := range dv.splitHunks {
343354 if dv.lineNumbers {
344355 b.WriteString(dv.style.DividerLine.LineNumber.Render(pad("…", dv.beforeNumDigits)))
@@ -371,19 +382,25 @@ func (dv *DiffView) renderSplit() string {
371382 if dv.lineNumbers {
372383 b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
373384 }
374− b.WriteString(dv.style.MissingLine.Code.Width(dv.fullCodeWidth).Render(" "))
385+ b.WriteString(beforeFullContentStyle.Render(
386+ dv.style.MissingLine.Code.Width(dv.fullCodeWidth).Render(" "),
387+ ))
375388 case l.before.Kind == udiff.Equal:
376389 if dv.lineNumbers {
377390 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
378391 }
379− b.WriteString(dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" " + beforeContent))
392+ b.WriteString(beforeFullContentStyle.Render(
393+ dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" " + beforeContent),
394+ ))
380395 beforeLine++
381396 case l.before.Kind == udiff.Delete:
382397 if dv.lineNumbers {
383398 b.WriteString(dv.style.DeleteLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
384399 }
385− b.WriteString(dv.style.DeleteLine.Symbol.Render("- "))
386− b.WriteString(dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(beforeContent))
400+ b.WriteString(beforeFullContentStyle.Render(
401+ dv.style.DeleteLine.Symbol.Render("- ") +
402+ dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(beforeContent),
403+ ))
387404 beforeLine++
388405 }
389406
@@ -392,19 +409,25 @@ func (dv *DiffView) renderSplit() string {
392409 if dv.lineNumbers {
393410 b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.afterNumDigits)))
394411 }
395− b.WriteString(dv.style.MissingLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "))
412+ b.WriteString(afterFullContentStyle.Render(
413+ dv.style.MissingLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "),
414+ ))
396415 case l.after.Kind == udiff.Equal:
397416 if dv.lineNumbers {
398417 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
399418 }
400− b.WriteString(dv.style.EqualLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" " + afterContent))
419+ b.WriteString(afterFullContentStyle.Render(
420+ dv.style.EqualLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" " + afterContent),
421+ ))
401422 afterLine++
402423 case l.after.Kind == udiff.Insert:
403424 if dv.lineNumbers {
404425 b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
405426 }
406− b.WriteString(dv.style.InsertLine.Symbol.Render("+ "))
407− b.WriteString(dv.style.InsertLine.Code.Width(dv.codeWidth + btoi(dv.extraColOnAfter)).Render(afterContent))
427+ b.WriteString(afterFullContentStyle.Render(
428+ dv.style.InsertLine.Symbol.Render("+ ") +
429+ dv.style.InsertLine.Code.Width(dv.codeWidth+btoi(dv.extraColOnAfter)).Render(afterContent),
430+ ))
408431 afterLine++
409432 }
410433
internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf009.golden+1−1
@@ -10,6 +10,6 @@
1010  9   10 
1111 10   11 
1212 11   12 
13− 12 -  13
13+ 12 - 13 
1414     14 
1515 13   15 
internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf010.golden+1−1
@@ -10,6 +10,6 @@
1010  9   10  
1111 10   11  
1212 11   12  
13− 12 -  13 
13+ 12 - 13 +
1414     14 +
1515 13   15  
internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf009.golden+1−1
@@ -10,6 +10,6 @@
1010  9   10 
1111 10   11 
1212 11   12 
13− 12 -  13
13+ 12 - 13 
1414     14 
1515 13   15 
internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf010.golden+1−1
@@ -10,6 +10,6 @@
1010  9   10  
1111 10   11  
1212 11   12  
13− 12 -  13 
13+ 12 - 13 +
1414     14 +
1515 13   15