on main help sign in
fix(diffview): fix small bug when width is very small
66cd982Andrey Nering
internal/exp/diffview/diffview.go+36−13
@@ -286,6 +286,8 @@ func (dv *DiffView) resizeCodeWidth() {
286func (dv *DiffView) renderUnified() string {
286func (dv *DiffView) renderUnified() string {
287 var b strings.Builder
287 var b strings.Builder
288
288
289+ fullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth)
290+
289 for _, h := range dv.unified.Hunks {
291 for _, h := range dv.unified.Hunks {
290 if dv.lineNumbers {
292 if dv.lineNumbers {
291 b.WriteString(dv.style.DividerLine.LineNumber.Render(pad("…", dv.beforeNumDigits)))
293 b.WriteString(dv.style.DividerLine.LineNumber.Render(pad("…", dv.beforeNumDigits)))
@@ -308,7 +310,9 @@ func (dv *DiffView) renderUnified() string {
308 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
310 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
309 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
311 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
310 }
312 }
313+ b.WriteString(fullContentStyle.Render(
311− b.WriteString(dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" " + content))
314+ dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" " + content),
315+ ))
312 beforeLine++
316 beforeLine++
313 afterLine++
317 afterLine++
314 case udiff.Insert:
318 case udiff.Insert:
@@ -316,16 +320,20 @@ func (dv *DiffView) renderUnified() string {
316 b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
320 b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
317 b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
321 b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
318 }
322 }
323+ b.WriteString(fullContentStyle.Render(
319− b.WriteString(dv.style.InsertLine.Symbol.Render("+ "))
324+ dv.style.InsertLine.Symbol.Render("+ ") +
320− b.WriteString(dv.style.InsertLine.Code.Width(dv.codeWidth).Render(content))
325+ dv.style.InsertLine.Code.Width(dv.codeWidth).Render(content),
326+ ))
321 afterLine++
327 afterLine++
322 case udiff.Delete:
328 case udiff.Delete:
323 if dv.lineNumbers {
329 if dv.lineNumbers {
324 b.WriteString(dv.style.DeleteLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
330 b.WriteString(dv.style.DeleteLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
325 b.WriteString(dv.style.DeleteLine.LineNumber.Render(pad(" ", dv.afterNumDigits)))
331 b.WriteString(dv.style.DeleteLine.LineNumber.Render(pad(" ", dv.afterNumDigits)))
326 }
332 }
333+ b.WriteString(fullContentStyle.Render(
327− b.WriteString(dv.style.DeleteLine.Symbol.Render("- "))
334+ dv.style.DeleteLine.Symbol.Render("- ") +
328− b.WriteString(dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(content))
335+ dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(content),
336+ ))
329 beforeLine++
337 beforeLine++
330 }
338 }
331 b.WriteRune('\n')
339 b.WriteRune('\n')
@@ -339,6 +347,9 @@ func (dv *DiffView) renderUnified() string {
339func (dv *DiffView) renderSplit() string {
347func (dv *DiffView) renderSplit() string {
340 var b strings.Builder
348 var b strings.Builder
341
349
350+ beforeFullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth)
351+ afterFullContentStyle := lipgloss.NewStyle().MaxWidth(dv.fullCodeWidth + btoi(dv.extraColOnAfter))
352+
342 for i, h := range dv.splitHunks {
353 for i, h := range dv.splitHunks {
343 if dv.lineNumbers {
354 if dv.lineNumbers {
344 b.WriteString(dv.style.DividerLine.LineNumber.Render(pad("…", dv.beforeNumDigits)))
355 b.WriteString(dv.style.DividerLine.LineNumber.Render(pad("…", dv.beforeNumDigits)))
@@ -371,19 +382,25 @@ func (dv *DiffView) renderSplit() string {
371 if dv.lineNumbers {
382 if dv.lineNumbers {
372 b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
383 b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.beforeNumDigits)))
373 }
384 }
385+ b.WriteString(beforeFullContentStyle.Render(
374− b.WriteString(dv.style.MissingLine.Code.Width(dv.fullCodeWidth).Render(" "))
386+ dv.style.MissingLine.Code.Width(dv.fullCodeWidth).Render(" "),
387+ ))
375 case l.before.Kind == udiff.Equal:
388 case l.before.Kind == udiff.Equal:
376 if dv.lineNumbers {
389 if dv.lineNumbers {
377 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
390 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
378 }
391 }
392+ b.WriteString(beforeFullContentStyle.Render(
379− b.WriteString(dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" " + beforeContent))
393+ dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" " + beforeContent),
394+ ))
380 beforeLine++
395 beforeLine++
381 case l.before.Kind == udiff.Delete:
396 case l.before.Kind == udiff.Delete:
382 if dv.lineNumbers {
397 if dv.lineNumbers {
383 b.WriteString(dv.style.DeleteLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
398 b.WriteString(dv.style.DeleteLine.LineNumber.Render(pad(beforeLine, dv.beforeNumDigits)))
384 }
399 }
400+ b.WriteString(beforeFullContentStyle.Render(
385− b.WriteString(dv.style.DeleteLine.Symbol.Render("- "))
401+ dv.style.DeleteLine.Symbol.Render("- ") +
386− b.WriteString(dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(beforeContent))
402+ dv.style.DeleteLine.Code.Width(dv.codeWidth).Render(beforeContent),
403+ ))
387 beforeLine++
404 beforeLine++
388 }
405 }
389
406
@@ -392,19 +409,25 @@ func (dv *DiffView) renderSplit() string {
392 if dv.lineNumbers {
409 if dv.lineNumbers {
393 b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.afterNumDigits)))
410 b.WriteString(dv.style.MissingLine.LineNumber.Render(pad(" ", dv.afterNumDigits)))
394 }
411 }
412+ b.WriteString(afterFullContentStyle.Render(
395− b.WriteString(dv.style.MissingLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "))
413+ dv.style.MissingLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" "),
414+ ))
396 case l.after.Kind == udiff.Equal:
415 case l.after.Kind == udiff.Equal:
397 if dv.lineNumbers {
416 if dv.lineNumbers {
398 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
417 b.WriteString(dv.style.EqualLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
399 }
418 }
419+ b.WriteString(afterFullContentStyle.Render(
400− b.WriteString(dv.style.EqualLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" " + afterContent))
420+ dv.style.EqualLine.Code.Width(dv.fullCodeWidth + btoi(dv.extraColOnAfter)).Render(" " + afterContent),
421+ ))
401 afterLine++
422 afterLine++
402 case l.after.Kind == udiff.Insert:
423 case l.after.Kind == udiff.Insert:
403 if dv.lineNumbers {
424 if dv.lineNumbers {
404 b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
425 b.WriteString(dv.style.InsertLine.LineNumber.Render(pad(afterLine, dv.afterNumDigits)))
405 }
426 }
427+ b.WriteString(afterFullContentStyle.Render(
406− b.WriteString(dv.style.InsertLine.Symbol.Render("+ "))
428+ dv.style.InsertLine.Symbol.Render("+ ") +
407− b.WriteString(dv.style.InsertLine.Code.Width(dv.codeWidth + btoi(dv.extraColOnAfter)).Render(afterContent))
429+ dv.style.InsertLine.Code.Width(dv.codeWidth+btoi(dv.extraColOnAfter)).Render(afterContent),
430+ ))
408 afterLine++
431 afterLine++
409 }
432 }
410
433
internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf009.golden+1−1
@@ -10,6 +10,6 @@
10  9   10 
10  9   10 
11 10   11 
11 10   11 
12 11   12 
12 11   12 
13− 12 -  13
13+ 12 - 13 
14     14 
14     14 
15 13   15 
15 13   15 
internal/exp/diffview/testdata/TestDiffViewWidth/Split/DarkMode/WidthOf010.golden+1−1
@@ -10,6 +10,6 @@
10  9   10  
10  9   10  
11 10   11  
11 10   11  
12 11   12  
12 11   12  
13− 12 -  13 
13+ 12 - 13 +
14     14 +
14     14 +
15 13   15  
15 13   15  
internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf009.golden+1−1
@@ -10,6 +10,6 @@
10  9   10 
10  9   10 
11 10   11 
11 10   11 
12 11   12 
12 11   12 
13− 12 -  13
13+ 12 - 13 
14     14 
14     14 
15 13   15 
15 13   15 
internal/exp/diffview/testdata/TestDiffViewWidth/Split/LightMode/WidthOf010.golden+1−1
@@ -10,6 +10,6 @@
10  9   10  
10  9   10  
11 10   11  
11 10   11  
12 11   12  
12 11   12  
13− 12 -  13 
13+ 12 - 13 +
14     14 +
14     14 +
15 13   15  
15 13   15