on main help sign in
fix(diffview): respect line style even if it's the last one with ellipsis
commit9f5d70c0a50d5a6f39f4c7890e57475cf15ce6b5 authorAndrey Nering <andreynering@users.noreply.github.com> dateWed 11 Jun 2025, 15:18 (1 year ago) parent594dfd7
22 files changed+50−28
internal/exp/diffview/diffview.go+29−7 internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf005.golden+1−1 internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf013.golden+1−1 internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf014.golden+1−1 internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf005.golden+1−1 internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf013.golden+1−1 internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf014.golden+1−1 internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf005.golden+1−1 internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf013.golden+1−1 internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf014.golden+1−1 internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf015.golden+1−1 internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf005.golden+1−1 internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf013.golden+1−1 internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf014.golden+1−1 internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf015.golden+1−1 internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf00.golden+1−1 internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf08.golden+1−1 internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf09.golden+1−1 internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf00.golden+1−1 internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf08.golden+1−1 internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf09.golden+1−1 internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf10.golden+1−1
internal/exp/diffview/diffview.go+29−7
@@ -331,12 +331,13 @@ outer:
331331 isLastHunk := i+1 == len(dv.unified.Hunks)
332332 isLastLine := j+1 == len(h.Lines)
333333 if hasReachedHeight && (!isLastHunk || !isLastLine) {
334+ lineStyle := dv.lineStyleForType(l.Kind)
334335 if dv.lineNumbers {
335− write(dv.style.EqualLine.LineNumber.Render(pad("…", dv.beforeNumDigits)))
336− write(dv.style.EqualLine.LineNumber.Render(pad("…", dv.afterNumDigits)))
336+ write(lineStyle.LineNumber.Render(pad("…", dv.beforeNumDigits)))
337+ write(lineStyle.LineNumber.Render(pad("…", dv.afterNumDigits)))
337338 }
338339 write(fullContentStyle.Render(
339− dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" …"),
340+ lineStyle.Code.Width(dv.fullCodeWidth).Render(" …"),
340341 ))
341342 write("\n")
342343 break outer
@@ -436,17 +437,25 @@ outer:
436437 isLastHunk := i+1 == len(dv.unified.Hunks)
437438 isLastLine := j+1 == len(h.lines)
438439 if hasReachedHeight && (!isLastHunk || !isLastLine) {
440+ lineStyle := dv.style.MissingLine
441+ if l.before != nil {
442+ lineStyle = dv.lineStyleForType(l.before.Kind)
443+ }
439444 if dv.lineNumbers {
440− write(dv.style.EqualLine.LineNumber.Render(pad("…", dv.beforeNumDigits)))
445+ write(lineStyle.LineNumber.Render(pad("…", dv.beforeNumDigits)))
441446 }
442447 write(beforeFullContentStyle.Render(
443− dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" …"),
448+ lineStyle.Code.Width(dv.fullCodeWidth).Render(" …"),
444449 ))
450+ lineStyle = dv.style.MissingLine
451+ if l.after != nil {
452+ lineStyle = dv.lineStyleForType(l.after.Kind)
453+ }
445454 if dv.lineNumbers {
446− write(dv.style.EqualLine.LineNumber.Render(pad("…", dv.afterNumDigits)))
455+ write(lineStyle.LineNumber.Render(pad("…", dv.afterNumDigits)))
447456 }
448457 write(afterFullContentStyle.Render(
449− dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render(" …"),
458+ lineStyle.Code.Width(dv.fullCodeWidth).Render(" …"),
450459 ))
451460 write("\n")
452461 break outer
@@ -573,3 +582,16 @@ func (dv *DiffView) hunkShownLines(h *udiff.Hunk) (before, after int) {
573582 }
574583 return
575584}
585+
586+func (dv *DiffView) lineStyleForType(t udiff.OpKind) LineStyle {
587+ switch t {
588+ case udiff.Equal:
589+ return dv.style.EqualLine
590+ case udiff.Insert:
591+ return dv.style.InsertLine
592+ case udiff.Delete:
593+ return dv.style.DeleteLine
594+ default:
595+ return dv.style.MissingLine
596+ }
597+}
internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf005.golden+1−1
@@ -2,4 +2,4 @@
22  2     2   
33  3  import (   3  import ( 
44  4  "fmt"   4  "fmt" 
5−  …  …   …  … 
5+  …  …   …  … 
internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf013.golden+1−1
@@ -10,4 +10,4 @@
1010  9  }  10  } 
1111 10    11   
1212 11  func getContent() string {  12  func getContent() string { 
13−  …  …   …  … 
13+  …  …   …  … 
internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf014.golden+1−1
@@ -11,4 +11,4 @@
1111 10    11   
1212 11  func getContent() string {  12  func getContent() string { 
1313 12 -  return "Hello, world!"  13 +  content := strings.ToUpper("Hello, World!") 
14−  …  …   …  … 
14+  …  …   …  … 
internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf005.golden+1−1
@@ -2,4 +2,4 @@
22  2     2   
33  3  import (   3  import ( 
44  4  "fmt"   4  "fmt" 
5−  …  …   …  … 
5+  …  …   …  … 
internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf013.golden+1−1
@@ -10,4 +10,4 @@
1010  9  }  10  } 
1111 10    11   
1212 11  func getContent() string {  12  func getContent() string { 
13−  …  …   …  … 
13+  …  …   …  … 
internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf014.golden+1−1
@@ -11,4 +11,4 @@
1111 10    11   
1212 11  func getContent() string {  12  func getContent() string { 
1313 12 -  return "Hello, world!"  13 +  content := strings.ToUpper("Hello, World!") 
14−  …  …   …  … 
14+  …  …   …  … 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf005.golden+1−1
@@ -2,4 +2,4 @@
22  2   2   
33  3   3  import ( 
44  4   4  "fmt" 
5−  …   …  … 
5+  …   …  … 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf013.golden+1−1
@@ -10,4 +10,4 @@
1010  9  10  } 
1111 10  11   
1212 11  12  func getContent() string { 
13−  …   …  … 
13+  …   …  … 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf014.golden+1−1
@@ -11,4 +11,4 @@
1111 10  11   
1212 11  12  func getContent() string { 
1313 12    -  return "Hello, world!" 
14−  …   …  … 
14+  …   …  … 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf015.golden+1−1
@@ -12,4 +12,4 @@
1212 11  12  func getContent() string { 
1313 12    -  return "Hello, world!" 
1414    13 +  content := strings.ToUpper("Hello, World!") 
15−  …   …  … 
15+  …   …  … 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf005.golden+1−1
@@ -2,4 +2,4 @@
22  2   2   
33  3   3  import ( 
44  4   4  "fmt" 
5−  …   …  … 
5+  …   …  … 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf013.golden+1−1
@@ -10,4 +10,4 @@
1010  9  10  } 
1111 10  11   
1212 11  12  func getContent() string { 
13−  …   …  … 
13+  …   …  … 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf014.golden+1−1
@@ -11,4 +11,4 @@
1111 10  11   
1212 11  12  func getContent() string { 
1313 12    -  return "Hello, world!" 
14−  …   …  … 
14+  …   …  … 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf015.golden+1−1
@@ -12,4 +12,4 @@
1212 11  12  func getContent() string { 
1313 12    -  return "Hello, world!" 
1414    13 +  content := strings.ToUpper("Hello, World!") 
15−  …   …  … 
15+  …   …  … 
internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf00.golden+1−1
@@ -2,4 +2,4 @@
22  2     2   
33  3  import (   3  import ( 
44  4  "fmt"   4  "fmt" 
5−  …  …   …  … 
5+  …  …   …  … 
internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf08.golden+1−1
@@ -2,4 +2,4 @@
22  9  }  10  } 
33 10    11   
44 11  func getContent() string {  12  func getContent() string { 
5−  …  …   …  … 
5+  …  …   …  … 
internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf09.golden+1−1
@@ -2,4 +2,4 @@
22 10    11   
33 11  func getContent() string {  12  func getContent() string { 
44 12 -  return "Hello, world!"  13 +  content := strings.ToUpper("Hello, World!") 
5−  …  …   …  … 
5+  …  …   …  … 
internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf00.golden+1−1
@@ -2,4 +2,4 @@
22  2   2   
33  3   3  import ( 
44  4   4  "fmt" 
5−  …   …  … 
5+  …   …  … 
internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf08.golden+1−1
@@ -2,4 +2,4 @@
22  9  10  } 
33 10  11   
44 11  12  func getContent() string { 
5−  …   …  … 
5+  …   …  … 
internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf09.golden+1−1
@@ -2,4 +2,4 @@
22 10  11   
33 11  12  func getContent() string { 
44 12    -  return "Hello, world!" 
5−  …   …  … 
5+  …   …  … 
internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf10.golden+1−1
@@ -2,4 +2,4 @@
22 11  12  func getContent() string { 
33 12    -  return "Hello, world!" 
44    13 +  content := strings.ToUpper("Hello, World!") 
5−  …   …  … 
5+  …   …  …