@@ -24,6 +24,8 @@ public struct AsyncDiffCodeBlock: View {
2424 let proposedForegroundColor : Color ?
2525 /// Whether to drop common leading spaces of each line.
2626 let droppingLeadingSpaces : Bool
27+ /// Whether to render the last diff section that only contains removals.
28+ let skipLastOnlyRemovalSection : Bool
2729
2830 public init (
2931 code: String ,
@@ -34,7 +36,8 @@ public struct AsyncDiffCodeBlock: View {
3436 font: NSFont ,
3537 droppingLeadingSpaces: Bool ,
3638 proposedForegroundColor: Color ? ,
37- ignoreWholeLineChangeInDiff: Bool = true
39+ ignoreWholeLineChangeInDiff: Bool = true ,
40+ skipLastOnlyRemovalSection: Bool = false
3841 ) {
3942 self . code = code
4043 self . originalCode = originalCode
@@ -44,6 +47,7 @@ public struct AsyncDiffCodeBlock: View {
4447 self . font = font
4548 self . proposedForegroundColor = proposedForegroundColor
4649 self . droppingLeadingSpaces = droppingLeadingSpaces
50+ self . skipLastOnlyRemovalSection = skipLastOnlyRemovalSection
4751 }
4852
4953 var foregroundColor : Color {
@@ -90,6 +94,9 @@ public struct AsyncDiffCodeBlock: View {
9094 . onChange ( of: proposedForegroundColor) { _ in
9195 storage. highlightStorage. highlight ( debounce: true , for: self )
9296 }
97+ . onChange ( of: skipLastOnlyRemovalSection) { _ in
98+ storage. skipLastOnlyRemovalSection = skipLastOnlyRemovalSection
99+ }
93100 }
94101 }
95102
@@ -170,7 +177,7 @@ extension AsyncDiffCodeBlock {
170177 class Storage {
171178 let diffStorage = DiffStorage ( )
172179 let highlightStorage = HighlightStorage ( )
173- var ignoreWholeLineChangeInDiff : Bool = true
180+ var skipLastOnlyRemovalSection : Bool = false
174181
175182 var code : String ? {
176183 get { highlightStorage. code }
@@ -209,7 +216,7 @@ extension AsyncDiffCodeBlock {
209216 new: highlightedCode,
210217 original: highlightedOriginalCode,
211218 commonPrecedingSpaceCount: commonPrecedingSpaceCount,
212- ignoreWholeLineChange : ignoreWholeLineChangeInDiff ,
219+ skipLastOnlyRemovalSection : skipLastOnlyRemovalSection ,
213220 diffResult: diffResult
214221 )
215222 }
@@ -223,14 +230,21 @@ extension AsyncDiffCodeBlock {
223230 new highlightedCode: [ NSAttributedString ] ,
224231 original originalHighlightedCode: [ NSAttributedString ] ,
225232 commonPrecedingSpaceCount: Int ,
226- ignoreWholeLineChange : Bool ,
233+ skipLastOnlyRemovalSection : Bool ,
227234 diffResult: CodeDiff . SnippetDiff
228235 ) -> [ Line ] {
229236 var lines = [ Line] ( )
230237
231- for section in diffResult. sections {
238+ for (index , section) in diffResult. sections. enumerated ( ) {
232239 guard !section. isEmpty else { continue }
233-
240+
241+ if skipLastOnlyRemovalSection,
242+ index == diffResult. sections. count - 1 ,
243+ section. newSnippet. isEmpty
244+ {
245+ continue
246+ }
247+
234248 for (index, line) in section. oldSnippet. enumerated ( ) {
235249 if line. diff == . unchanged { continue }
236250 let lineIndex = section. oldOffset + index
0 commit comments