@@ -209,19 +209,20 @@ impl Editor {
209
209
210
210
retain
211
211
} ) ;
212
- for remaining_hunk in hunks_to_toggle {
213
- let remaining_hunk_point_range =
214
- Point :: new ( remaining_hunk. row_range . start . 0 , 0 )
215
- ..Point :: new ( remaining_hunk. row_range . end . 0 , 0 ) ;
212
+ for hunk in hunks_to_toggle {
213
+ let remaining_hunk_point_range = Point :: new ( hunk. row_range . start . 0 , 0 )
214
+ ..Point :: new ( hunk. row_range . end . 0 , 0 ) ;
215
+ let hunk_start = snapshot
216
+ . buffer_snapshot
217
+ . anchor_before ( remaining_hunk_point_range. start ) ;
218
+ let hunk_end = snapshot
219
+ . buffer_snapshot
220
+ . anchor_in_excerpt ( hunk_start. excerpt_id , hunk. buffer_range . end )
221
+ . unwrap ( ) ;
216
222
hunks_to_expand. push ( HoveredHunk {
217
- status : hunk_status ( & remaining_hunk) ,
218
- multi_buffer_range : snapshot
219
- . buffer_snapshot
220
- . anchor_before ( remaining_hunk_point_range. start )
221
- ..snapshot
222
- . buffer_snapshot
223
- . anchor_after ( remaining_hunk_point_range. end ) ,
224
- diff_base_byte_range : remaining_hunk. diff_base_byte_range . clone ( ) ,
223
+ status : hunk_status ( & hunk) ,
224
+ multi_buffer_range : hunk_start..hunk_end,
225
+ diff_base_byte_range : hunk. diff_base_byte_range . clone ( ) ,
225
226
} ) ;
226
227
}
227
228
@@ -246,33 +247,22 @@ impl Editor {
246
247
hunk : & HoveredHunk ,
247
248
cx : & mut ViewContext < ' _ , Editor > ,
248
249
) -> Option < ( ) > {
249
- let multi_buffer_snapshot = self . buffer ( ) . read ( cx) . snapshot ( cx) ;
250
+ let buffer = self . buffer . clone ( ) ;
251
+ let multi_buffer_snapshot = buffer. read ( cx) . snapshot ( cx) ;
250
252
let hunk_range = hunk. multi_buffer_range . clone ( ) ;
251
- let hunk_point_range = hunk_range. to_point ( & multi_buffer_snapshot) ;
252
-
253
- let buffer = self . buffer ( ) . clone ( ) ;
254
- let snapshot = self . snapshot ( cx) ;
255
253
let ( diff_base_buffer, deleted_text_lines) = buffer. update ( cx, |buffer, cx| {
256
- let hunk = buffer_diff_hunk ( & snapshot. buffer_snapshot , hunk_point_range. clone ( ) ) ?;
257
- let mut buffer_ranges = buffer. range_to_buffer_ranges ( hunk_point_range, cx) ;
258
- if buffer_ranges. len ( ) == 1 {
259
- let ( buffer, _, _) = buffer_ranges. pop ( ) ?;
260
- let diff_base_buffer = diff_base_buffer
261
- . or_else ( || self . current_diff_base_buffer ( & buffer, cx) )
262
- . or_else ( || create_diff_base_buffer ( & buffer, cx) ) ?;
263
- let buffer = buffer. read ( cx) ;
264
- let deleted_text_lines = buffer. diff_base ( ) . map ( |diff_base| {
265
- let diff_start_row = diff_base
266
- . offset_to_point ( hunk. diff_base_byte_range . start )
267
- . row ;
268
- let diff_end_row = diff_base. offset_to_point ( hunk. diff_base_byte_range . end ) . row ;
269
-
270
- diff_end_row - diff_start_row
271
- } ) ?;
272
- Some ( ( diff_base_buffer, deleted_text_lines) )
273
- } else {
274
- None
275
- }
254
+ let buffer = buffer. buffer ( hunk_range. start . buffer_id ?) ?;
255
+ let diff_base_buffer = diff_base_buffer
256
+ . or_else ( || self . current_diff_base_buffer ( & buffer, cx) )
257
+ . or_else ( || create_diff_base_buffer ( & buffer, cx) ) ?;
258
+ let deleted_text_lines = buffer. read ( cx) . diff_base ( ) . map ( |diff_base| {
259
+ let diff_start_row = diff_base
260
+ . offset_to_point ( hunk. diff_base_byte_range . start )
261
+ . row ;
262
+ let diff_end_row = diff_base. offset_to_point ( hunk. diff_base_byte_range . end ) . row ;
263
+ diff_end_row - diff_start_row
264
+ } ) ?;
265
+ Some ( ( diff_base_buffer, deleted_text_lines) )
276
266
} ) ?;
277
267
278
268
let block_insert_index = match self . expanded_hunks . hunks . binary_search_by ( |probe| {
@@ -1128,21 +1118,6 @@ fn editor_with_deleted_text(
1128
1118
( editor_height, editor)
1129
1119
}
1130
1120
1131
- fn buffer_diff_hunk (
1132
- buffer_snapshot : & MultiBufferSnapshot ,
1133
- row_range : Range < Point > ,
1134
- ) -> Option < MultiBufferDiffHunk > {
1135
- let mut hunks = buffer_snapshot. git_diff_hunks_in_range (
1136
- MultiBufferRow ( row_range. start . row ) ..MultiBufferRow ( row_range. end . row ) ,
1137
- ) ;
1138
- let hunk = hunks. next ( ) ?;
1139
- let second_hunk = hunks. next ( ) ;
1140
- if second_hunk. is_none ( ) {
1141
- return Some ( hunk) ;
1142
- }
1143
- None
1144
- }
1145
-
1146
1121
impl DisplayDiffHunk {
1147
1122
pub fn start_display_row ( & self ) -> DisplayRow {
1148
1123
match self {
@@ -1209,7 +1184,10 @@ pub fn diff_hunk_to_display(
1209
1184
let hunk_end_point = Point :: new ( hunk_end_row. 0 , 0 ) ;
1210
1185
1211
1186
let multi_buffer_start = snapshot. buffer_snapshot . anchor_before ( hunk_start_point) ;
1212
- let multi_buffer_end = snapshot. buffer_snapshot . anchor_after ( hunk_end_point) ;
1187
+ let multi_buffer_end = snapshot
1188
+ . buffer_snapshot
1189
+ . anchor_in_excerpt ( multi_buffer_start. excerpt_id , hunk. buffer_range . end )
1190
+ . unwrap ( ) ;
1213
1191
let end = hunk_end_point. to_display_point ( snapshot) . row ( ) ;
1214
1192
1215
1193
DisplayDiffHunk :: Unfolded {
0 commit comments