@@ -249,19 +249,7 @@ impl Document {
249249
250250 // if within a statement, we can modify it if the change results in also a single statement
251251 if affected_indices. len ( ) == 1 {
252- let start_byte = new_content
253- . char_indices ( )
254- . nth ( usize:: from ( affected_range. start ( ) ) )
255- . map ( |( i, _) | i)
256- . unwrap_or ( new_content. len ( ) ) ;
257-
258- let end_byte = new_content
259- . char_indices ( )
260- . nth ( usize:: from ( affected_range. end ( ) ) )
261- . map ( |( i, _) | i)
262- . unwrap_or ( new_content. len ( ) ) ;
263-
264- let changed_content = & new_content[ start_byte..end_byte] ;
252+ let changed_content = get_affected ( & new_content, affected_range) ;
265253
266254 let ( new_ranges, diags) =
267255 document:: split_with_diagnostics ( changed_content, Some ( affected_range. start ( ) ) ) ;
@@ -314,19 +302,7 @@ impl Document {
314302 }
315303
316304 // in any other case, parse the full affected range
317- let start_byte = new_content
318- . char_indices ( )
319- . nth ( usize:: from ( full_affected_range. start ( ) ) )
320- . map ( |( i, _) | i)
321- . unwrap_or ( new_content. len ( ) ) ;
322-
323- let end_byte = new_content
324- . char_indices ( )
325- . nth ( usize:: from ( full_affected_range. end ( ) ) )
326- . map ( |( i, _) | i)
327- . unwrap_or ( new_content. len ( ) ) ;
328-
329- let changed_content = & new_content[ start_byte..end_byte] ;
305+ let changed_content = get_affected ( & new_content, full_affected_range) ;
330306
331307 let ( new_ranges, diags) =
332308 document:: split_with_diagnostics ( changed_content, Some ( full_affected_range. start ( ) ) ) ;
@@ -430,6 +406,22 @@ impl ChangeParams {
430406 }
431407}
432408
409+ fn get_affected ( content : & str , range : TextRange ) -> & str {
410+ let start_byte = content
411+ . char_indices ( )
412+ . nth ( usize:: from ( range. start ( ) ) )
413+ . map ( |( i, _) | i)
414+ . unwrap_or ( content. len ( ) ) ;
415+
416+ let end_byte = content
417+ . char_indices ( )
418+ . nth ( usize:: from ( range. end ( ) ) )
419+ . map ( |( i, _) | i)
420+ . unwrap_or ( content. len ( ) ) ;
421+
422+ & content[ start_byte..end_byte]
423+ }
424+
433425#[ cfg( test) ]
434426mod tests {
435427 use super :: * ;
0 commit comments