From 9f5d70c0a50d5a6f39f4c7890e57475cf15ce6b5 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Wed, 11 Jun 2025 15:18:31 -0300 Subject: [PATCH] fix(diffview): respect line style even if it's the last one with ellipsis --- internal/exp/diffview/diffview.go | 36 +++++++++++++++---- .../Split/DarkMode/HeightOf005.golden | 2 +- .../Split/DarkMode/HeightOf013.golden | 2 +- .../Split/DarkMode/HeightOf014.golden | 2 +- .../Split/LightMode/HeightOf005.golden | 2 +- .../Split/LightMode/HeightOf013.golden | 2 +- .../Split/LightMode/HeightOf014.golden | 2 +- .../Unified/DarkMode/HeightOf005.golden | 2 +- .../Unified/DarkMode/HeightOf013.golden | 2 +- .../Unified/DarkMode/HeightOf014.golden | 2 +- .../Unified/DarkMode/HeightOf015.golden | 2 +- .../Unified/LightMode/HeightOf005.golden | 2 +- .../Unified/LightMode/HeightOf013.golden | 2 +- .../Unified/LightMode/HeightOf014.golden | 2 +- .../Unified/LightMode/HeightOf015.golden | 2 +- .../Split/YOffsetOf00.golden | 2 +- .../Split/YOffsetOf08.golden | 2 +- .../Split/YOffsetOf09.golden | 2 +- .../Unified/YOffsetOf00.golden | 2 +- .../Unified/YOffsetOf08.golden | 2 +- .../Unified/YOffsetOf09.golden | 2 +- .../Unified/YOffsetOf10.golden | 2 +- 22 files changed, 50 insertions(+), 28 deletions(-) diff --git a/internal/exp/diffview/diffview.go b/internal/exp/diffview/diffview.go index 871949fcf1d972def5b54a3c4112b0d6fad146bb..f3801afb26f77a7285053369277be787c93e39f5 100644 --- a/internal/exp/diffview/diffview.go +++ b/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 + } +} diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf005.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf005.golden index bf3ca743fa08655692d08469b7751841592e66a3..b3ba3be7244f5fad01056fa0dd4de29dd2d93624 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf005.golden +++ b/internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf005.golden @@ -2,4 +2,4 @@   2     2      3  import (   3  import (    4  "fmt"   4  "fmt"  -  …  …   …  …  \ No newline at end of file +  …  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf013.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf013.golden index 45e0f1271727e29e1f20898a1c1d431fe9bca073..b9fc1bf7e2f5c7f9d823a140b3df424289961fd7 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf013.golden +++ b/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 {  -  …  …   …  …  \ No newline at end of file +  …  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf014.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf014.golden index 54207639856f930f4c629e1fcfcbfbdda5c7b691..13f4a0fd731ffdecef8125aeca7b8cb602a984f7 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Split/DarkMode/HeightOf014.golden +++ b/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!")  -  …  …   …  …  \ No newline at end of file +  …  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf005.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf005.golden index 14803d08c905475b4cd0146c363da33f85eb7979..6515d553ee9c3077bcf503e96fc6fbaad662bfd4 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf005.golden +++ b/internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf005.golden @@ -2,4 +2,4 @@   2     2      3  import (   3  import (    4  "fmt"   4  "fmt"  -  …  …   …  …  \ No newline at end of file +  …  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf013.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf013.golden index fdb87616054a57763875bf5119b2c834391cdbeb..b0993db7fd6e53f144e07a3db91940ed0ef529c6 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf013.golden +++ b/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 {  -  …  …   …  …  \ No newline at end of file +  …  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf014.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf014.golden index 7f71193ca70d6c3fe17a87a3d96ff8fe91f2adef..63caade9138ef74cf5abe6d9e85a97e1c7307519 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Split/LightMode/HeightOf014.golden +++ b/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!")  -  …  …   …  …  \ No newline at end of file +  …  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf005.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf005.golden index 769af9e0f214d92e24447a3a4efce6916cb8e25a..72f781ea7470a4e350ea3f228ea69c05f70849b7 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf005.golden +++ b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf005.golden @@ -2,4 +2,4 @@   2   2      3   3  import (    4   4  "fmt"  -  …   …  …  \ No newline at end of file +  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf013.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf013.golden index e3841b3152f9bb355db26223ce5e5afa8dd930b1..ee78391db24ffe6c5b275a832e9f1e3893cfb416 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf013.golden +++ b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf013.golden @@ -10,4 +10,4 @@   9  10  }   10  11     11  12  func getContent() string {  -  …   …  …  \ No newline at end of file +  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf014.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf014.golden index 1c95c2530d5324b105d9674fca17b5c387410a0b..244d471c54f05cdae9f6dcb9e18adef79a6f851c 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf014.golden +++ b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf014.golden @@ -11,4 +11,4 @@  10  11     11  12  func getContent() string {   12    -  return "Hello, world!"  -  …   …  …  \ No newline at end of file +  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf015.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf015.golden index 4b40f3f5844a477be7c55bafbabc86a6d9c7cf04..bf521c4f3b194404905d6b104adcec0936b0436e 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/DarkMode/HeightOf015.golden +++ b/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!")  -  …   …  …  \ No newline at end of file +  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf005.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf005.golden index 50e179fe27212fc7bab77c96cf966daa0b070a14..f73f2e5107400bb11415c48d3b8446009f22373d 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf005.golden +++ b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf005.golden @@ -2,4 +2,4 @@   2   2      3   3  import (    4   4  "fmt"  -  …   …  …  \ No newline at end of file +  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf013.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf013.golden index 2cc1825ce79a03986a0e45f597a35dce309430e8..c3567a7095df72c0f74066c21f4c9e6d8e802aa9 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf013.golden +++ b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf013.golden @@ -10,4 +10,4 @@   9  10  }   10  11     11  12  func getContent() string {  -  …   …  …  \ No newline at end of file +  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf014.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf014.golden index 261c703aca33987a9bb1312f859ff896cb9cb471..64b13049fd0568077bd8599adf666ff85924caf8 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf014.golden +++ b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf014.golden @@ -11,4 +11,4 @@  10  11     11  12  func getContent() string {   12    -  return "Hello, world!"  -  …   …  …  \ No newline at end of file +  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf015.golden b/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf015.golden index 96c15aec6aabdf2d1e079d66f4e914ee31f15e18..1ae8e47ea0ecbf64d831a09f1822d06ffba75ed6 100644 --- a/internal/exp/diffview/testdata/TestDiffViewHeight/Unified/LightMode/HeightOf015.golden +++ b/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!")  -  …   …  …  \ No newline at end of file +  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf00.golden b/internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf00.golden index 14803d08c905475b4cd0146c363da33f85eb7979..6515d553ee9c3077bcf503e96fc6fbaad662bfd4 100644 --- a/internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf00.golden +++ b/internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf00.golden @@ -2,4 +2,4 @@   2     2      3  import (   3  import (    4  "fmt"   4  "fmt"  -  …  …   …  …  \ No newline at end of file +  …  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf08.golden b/internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf08.golden index dec2d8cf37a8a022d73f705c6ef72323678f13ef..d34bf595e33b47b491d0f857aeb6b81390a2e5bf 100644 --- a/internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf08.golden +++ b/internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf08.golden @@ -2,4 +2,4 @@   9  }  10  }   10    11     11  func getContent() string {  12  func getContent() string {  -  …  …   …  …  \ No newline at end of file +  …  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf09.golden b/internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf09.golden index 90982b5c972b7a1529e56eec8143c8c78acf4739..3706e309d70f9d5f205759fa5cedddb3058340c2 100644 --- a/internal/exp/diffview/testdata/TestDiffViewYOffset/Split/YOffsetOf09.golden +++ b/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!")  -  …  …   …  …  \ No newline at end of file +  …  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf00.golden b/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf00.golden index 50e179fe27212fc7bab77c96cf966daa0b070a14..f73f2e5107400bb11415c48d3b8446009f22373d 100644 --- a/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf00.golden +++ b/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf00.golden @@ -2,4 +2,4 @@   2   2      3   3  import (    4   4  "fmt"  -  …   …  …  \ No newline at end of file +  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf08.golden b/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf08.golden index 69f40b94f48670634a786c71d7451c03f3a3148c..afc8217aa8e375c16880a43ed5b336f91d156dc6 100644 --- a/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf08.golden +++ b/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf08.golden @@ -2,4 +2,4 @@   9  10  }   10  11     11  12  func getContent() string {  -  …   …  …  \ No newline at end of file +  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf09.golden b/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf09.golden index 1e21a2b99378c3412de7a0fabe81beab28aaeb92..f6ed57fa6d22a57330216a657572604fd1afca89 100644 --- a/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf09.golden +++ b/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf09.golden @@ -2,4 +2,4 @@  10  11     11  12  func getContent() string {   12    -  return "Hello, world!"  -  …   …  …  \ No newline at end of file +  …   …  …  \ No newline at end of file diff --git a/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf10.golden b/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf10.golden index e6998d09e18f4df9477b33510b22754ad32fc764..9703601b959a88c999b6d54320bf339eeab53c1d 100644 --- a/internal/exp/diffview/testdata/TestDiffViewYOffset/Unified/YOffsetOf10.golden +++ b/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!")  -  …   …  …  \ No newline at end of file +  …   …  …  \ No newline at end of file