fix(diffview): respect line style even if it's the last one with ellipsis

Andrey Nering created

Change summary

internal/exp/diffview/diffview.go                                                      | 36 
internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf005.golden    |  2 
internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf013.golden    |  2 
internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf014.golden    |  2 
internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf005.golden   |  2 
internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf013.golden   |  2 
internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf014.golden   |  2 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf005.golden  |  2 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf013.golden  |  2 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf014.golden  |  2 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf015.golden  |  2 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf005.golden |  2 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf013.golden |  2 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf014.golden |  2 
internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf015.golden |  2 
internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf00.golden            |  2 
internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf08.golden            |  2 
internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf09.golden            |  2 
internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf00.golden          |  2 
internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf08.golden          |  2 
internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf09.golden          |  2 
internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf10.golden          |  2 
22 files changed, 50 insertions(+), 28 deletions(-)

Detailed changes

internal/exp/diffview/diffview.go šŸ”—

@@ -331,12 +331,13 @@ outer:
 			isLastHunk := i+1 == len(dv.unified.Hunks)
 			isLastLine := j+1 == len(h.Lines)
 			if hasReachedHeight && (!isLastHunk || !isLastLine) {
+				lineStyle := dv.lineStyleForType(l.Kind)
 				if dv.lineNumbers {
-					write(dv.style.EqualLine.LineNumber.Render(pad("…", dv.beforeNumDigits)))
-					write(dv.style.EqualLine.LineNumber.Render(pad("…", dv.afterNumDigits)))
+					write(lineStyle.LineNumber.Render(pad("…", dv.beforeNumDigits)))
+					write(lineStyle.LineNumber.Render(pad("…", dv.afterNumDigits)))
 				}
 				write(fullContentStyle.Render(
-					dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render("  …"),
+					lineStyle.Code.Width(dv.fullCodeWidth).Render("  …"),
 				))
 				write("\n")
 				break outer
@@ -436,17 +437,25 @@ outer:
 			isLastHunk := i+1 == len(dv.unified.Hunks)
 			isLastLine := j+1 == len(h.lines)
 			if hasReachedHeight && (!isLastHunk || !isLastLine) {
+				lineStyle := dv.style.MissingLine
+				if l.before != nil {
+					lineStyle = dv.lineStyleForType(l.before.Kind)
+				}
 				if dv.lineNumbers {
-					write(dv.style.EqualLine.LineNumber.Render(pad("…", dv.beforeNumDigits)))
+					write(lineStyle.LineNumber.Render(pad("…", dv.beforeNumDigits)))
 				}
 				write(beforeFullContentStyle.Render(
-					dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render("  …"),
+					lineStyle.Code.Width(dv.fullCodeWidth).Render("  …"),
 				))
+				lineStyle = dv.style.MissingLine
+				if l.after != nil {
+					lineStyle = dv.lineStyleForType(l.after.Kind)
+				}
 				if dv.lineNumbers {
-					write(dv.style.EqualLine.LineNumber.Render(pad("…", dv.afterNumDigits)))
+					write(lineStyle.LineNumber.Render(pad("…", dv.afterNumDigits)))
 				}
 				write(afterFullContentStyle.Render(
-					dv.style.EqualLine.Code.Width(dv.fullCodeWidth).Render("  …"),
+					lineStyle.Code.Width(dv.fullCodeWidth).Render("  …"),
 				))
 				write("\n")
 				break outer
@@ -573,3 +582,16 @@ func (dv *DiffView) hunkShownLines(h *udiff.Hunk) (before, after int) {
 	}
 	return
 }
+
+func (dv *DiffView) lineStyleForType(t udiff.OpKind) LineStyle {
+	switch t {
+	case udiff.Equal:
+		return dv.style.EqualLine
+	case udiff.Insert:
+		return dv.style.InsertLine
+	case udiff.Delete:
+		return dv.style.DeleteLine
+	default:
+		return dv.style.MissingLine
+	}
+}

internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf005.golden šŸ”—

@@ -2,4 +2,4 @@
 Ā  2Ā                                                   Ā  2Ā                                                   
 Ā  3Ā   import (                                        Ā  3Ā   import (                                        
 Ā  4Ā       "fmt"                                       Ā  4Ā       "fmt"                                       
-Ā  …Ā   …                                               Ā  …Ā   …                                               
+Ā  …Ā   …                                               Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf013.golden šŸ”—

@@ -10,4 +10,4 @@
 Ā  9Ā   }                                               Ā 10Ā   }                                               
 Ā 10Ā                                                   Ā 11Ā                                                   
 Ā 11Ā   func getContent() string {                      Ā 12Ā   func getContent() string {                      
-Ā  …Ā   …                                               Ā  …Ā   …                                               
+Ā  …Ā   …                                               Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf014.golden šŸ”—

@@ -11,4 +11,4 @@
 Ā 10Ā                                                   Ā 11Ā                                                   
 Ā 11Ā   func getContent() string {                      Ā 12Ā   func getContent() string {                      
 Ā 12Ā -     return "Hello, world!"                      Ā 13Ā +     content := strings.ToUpper("Hello, World!") 
-Ā  …Ā   …                                               Ā  …Ā   …                                               
+Ā  …Ā   …                                               Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf005.golden šŸ”—

@@ -2,4 +2,4 @@
 Ā  2Ā                                                   Ā  2Ā                                                   
 Ā  3Ā   import (                                        Ā  3Ā   import (                                        
 Ā  4Ā       "fmt"                                       Ā  4Ā       "fmt"                                       
-Ā  …Ā   …                                               Ā  …Ā   …                                               
+Ā  …Ā   …                                               Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf013.golden šŸ”—

@@ -10,4 +10,4 @@
 Ā  9Ā   }                                               Ā 10Ā   }                                               
 Ā 10Ā                                                   Ā 11Ā                                                   
 Ā 11Ā   func getContent() string {                      Ā 12Ā   func getContent() string {                      
-Ā  …Ā   …                                               Ā  …Ā   …                                               
+Ā  …Ā   …                                               Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf014.golden šŸ”—

@@ -11,4 +11,4 @@
 Ā 10Ā                                                   Ā 11Ā                                                   
 Ā 11Ā   func getContent() string {                      Ā 12Ā   func getContent() string {                      
 Ā 12Ā -     return "Hello, world!"                      Ā 13Ā +     content := strings.ToUpper("Hello, World!") 
-Ā  …Ā   …                                               Ā  …Ā   …                                               
+Ā  …Ā   …                                               Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf005.golden šŸ”—

@@ -2,4 +2,4 @@
 Ā  2Ā Ā  2Ā                                                   
 Ā  3Ā Ā  3Ā   import (                                        
 Ā  4Ā Ā  4Ā       "fmt"                                       
-Ā  …Ā Ā  …Ā   …                                               
+Ā  …Ā Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf013.golden šŸ”—

@@ -10,4 +10,4 @@
 Ā  9Ā Ā 10Ā   }                                               
 Ā 10Ā Ā 11Ā                                                   
 Ā 11Ā Ā 12Ā   func getContent() string {                      
-Ā  …Ā Ā  …Ā   …                                               
+Ā  …Ā Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf014.golden šŸ”—

@@ -11,4 +11,4 @@
 Ā 10Ā Ā 11Ā                                                   
 Ā 11Ā Ā 12Ā   func getContent() string {                      
 Ā 12Ā Ā   Ā -     return "Hello, world!"                      
-Ā  …Ā Ā  …Ā   …                                               
+Ā  …Ā Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf015.golden šŸ”—

@@ -12,4 +12,4 @@
 Ā 11Ā Ā 12Ā   func getContent() string {                      
 Ā 12Ā Ā   Ā -     return "Hello, world!"                      
 Ā   Ā Ā 13Ā +     content := strings.ToUpper("Hello, World!") 
-Ā  …Ā Ā  …Ā   …                                               
+Ā  …Ā Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf005.golden šŸ”—

@@ -2,4 +2,4 @@
 Ā  2Ā Ā  2Ā                                                   
 Ā  3Ā Ā  3Ā   import (                                        
 Ā  4Ā Ā  4Ā       "fmt"                                       
-Ā  …Ā Ā  …Ā   …                                               
+Ā  …Ā Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf013.golden šŸ”—

@@ -10,4 +10,4 @@
 Ā  9Ā Ā 10Ā   }                                               
 Ā 10Ā Ā 11Ā                                                   
 Ā 11Ā Ā 12Ā   func getContent() string {                      
-Ā  …Ā Ā  …Ā   …                                               
+Ā  …Ā Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf014.golden šŸ”—

@@ -11,4 +11,4 @@
 Ā 10Ā Ā 11Ā                                                   
 Ā 11Ā Ā 12Ā   func getContent() string {                      
 Ā 12Ā Ā   Ā -     return "Hello, world!"                      
-Ā  …Ā Ā  …Ā   …                                               
+Ā  …Ā Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf015.golden šŸ”—

@@ -12,4 +12,4 @@
 Ā 11Ā Ā 12Ā   func getContent() string {                      
 Ā 12Ā Ā   Ā -     return "Hello, world!"                      
 Ā   Ā Ā 13Ā +     content := strings.ToUpper("Hello, World!") 
-Ā  …Ā Ā  …Ā   …                                               
+Ā  …Ā Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf00.golden šŸ”—

@@ -2,4 +2,4 @@
 Ā  2Ā                                                   Ā  2Ā                                                   
 Ā  3Ā   import (                                        Ā  3Ā   import (                                        
 Ā  4Ā       "fmt"                                       Ā  4Ā       "fmt"                                       
-Ā  …Ā   …                                               Ā  …Ā   …                                               
+Ā  …Ā   …                                               Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf08.golden šŸ”—

@@ -2,4 +2,4 @@
 Ā  9Ā   }                                               Ā 10Ā   }                                               
 Ā 10Ā                                                   Ā 11Ā                                                   
 Ā 11Ā   func getContent() string {                      Ā 12Ā   func getContent() string {                      
-Ā  …Ā   …                                               Ā  …Ā   …                                               
+Ā  …Ā   …                                               Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf09.golden šŸ”—

@@ -2,4 +2,4 @@
 Ā 10Ā                                                   Ā 11Ā                                                   
 Ā 11Ā   func getContent() string {                      Ā 12Ā   func getContent() string {                      
 Ā 12Ā -     return "Hello, world!"                      Ā 13Ā +     content := strings.ToUpper("Hello, World!") 
-Ā  …Ā   …                                               Ā  …Ā   …                                               
+Ā  …Ā   …                                               Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf00.golden šŸ”—

@@ -2,4 +2,4 @@
 Ā  2Ā Ā  2Ā                                                   
 Ā  3Ā Ā  3Ā   import (                                        
 Ā  4Ā Ā  4Ā       "fmt"                                       
-Ā  …Ā Ā  …Ā   …                                               
+Ā  …Ā Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf08.golden šŸ”—

@@ -2,4 +2,4 @@
 Ā  9Ā Ā 10Ā   }                                               
 Ā 10Ā Ā 11Ā                                                   
 Ā 11Ā Ā 12Ā   func getContent() string {                      
-Ā  …Ā Ā  …Ā   …                                               
+Ā  …Ā Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf09.golden šŸ”—

@@ -2,4 +2,4 @@
 Ā 10Ā Ā 11Ā                                                   
 Ā 11Ā Ā 12Ā   func getContent() string {                      
 Ā 12Ā Ā   Ā -     return "Hello, world!"                      
-Ā  …Ā Ā  …Ā   …                                               
+Ā  …Ā Ā  …Ā   …                                               

internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf10.golden šŸ”—

@@ -2,4 +2,4 @@
 Ā 11Ā Ā 12Ā   func getContent() string {                      
 Ā 12Ā Ā   Ā -     return "Hello, world!"                      
 Ā   Ā Ā 13Ā +     content := strings.ToUpper("Hello, World!") 
-Ā  …Ā Ā  …Ā   …                                               
+Ā  …Ā Ā  …Ā   …