@@ -169,9 +169,10 @@ impl Source for ReplaceSource {
169169 }
170170 }
171171
172+ #[ allow( unsafe_code) ]
172173 fn rope ( & self ) -> Vec < & str > {
173174 let inner_rope = self . inner . rope ( ) ;
174- let mut rope =
175+ let mut rope: Vec < & str > =
175176 Vec :: with_capacity ( inner_rope. len ( ) + self . replacements . len ( ) * 2 ) ;
176177
177178 let mut pos: usize = 0 ;
@@ -206,13 +207,15 @@ impl Source for ReplaceSource {
206207 if next_replacement_pos > pos {
207208 // Emit chunk until replacement
208209 let offset = next_replacement_pos - pos;
209- let chunk_slice = & chunk[ chunk_pos..( chunk_pos + offset) ] ;
210+ let chunk_slice =
211+ unsafe { & chunk. get_unchecked ( chunk_pos..( chunk_pos + offset) ) } ;
210212 rope. push ( chunk_slice) ;
211213 chunk_pos += offset;
212214 pos = next_replacement_pos;
213215 }
214216 // Insert replacement content split into chunks by lines
215- let replacement = & self . replacements [ replacement_idx] ;
217+ let replacement =
218+ unsafe { & self . replacements . get_unchecked ( replacement_idx) } ;
216219 rope. push ( & replacement. content ) ;
217220
218221 // Remove replaced content by settings this variable
@@ -225,7 +228,9 @@ impl Source for ReplaceSource {
225228 // Move to next replacement
226229 replacement_idx += 1 ;
227230 next_replacement = if replacement_idx < self . replacements . len ( ) {
228- Some ( self . replacements [ replacement_idx] . start as usize )
231+ Some ( unsafe {
232+ self . replacements . get_unchecked ( replacement_idx) . start as usize
233+ } )
229234 } else {
230235 None
231236 } ;
@@ -251,14 +256,15 @@ impl Source for ReplaceSource {
251256
252257 // Emit remaining chunk
253258 if chunk_pos < chunk. len ( ) {
254- rope. push ( & chunk[ chunk_pos..] ) ;
259+ rope. push ( unsafe { & chunk. get_unchecked ( chunk_pos..) } ) ;
255260 }
256261 pos = end_pos;
257262 }
258263
259264 // Handle remaining replacements one by one
260265 while replacement_idx < self . replacements . len ( ) {
261- let content = & self . replacements [ replacement_idx] . content ;
266+ let content =
267+ unsafe { & self . replacements . get_unchecked ( replacement_idx) . content } ;
262268 rope. push ( content) ;
263269 replacement_idx += 1 ;
264270 }
0 commit comments