@@ -42,9 +42,9 @@ impl ChangedStatement {
4242 }
4343}
4444
45- fn apply_text_change ( text : & String , range : Option < TextRange > , change_text : & String ) -> String {
45+ fn apply_text_change ( text : & str , range : Option < TextRange > , change_text : & str ) -> String {
4646 if range. is_none ( ) {
47- return change_text. clone ( ) ;
47+ return change_text. to_string ( ) ;
4848 }
4949
5050 let range = range. unwrap ( ) ;
@@ -53,7 +53,7 @@ fn apply_text_change(text: &String, range: Option<TextRange>, change_text: &Stri
5353
5454 let mut new_text = String :: new ( ) ;
5555 new_text. push_str ( & text[ ..start] ) ;
56- new_text. push_str ( & change_text) ;
56+ new_text. push_str ( change_text) ;
5757 new_text. push_str ( & text[ end..] ) ;
5858
5959 new_text
@@ -97,7 +97,7 @@ impl Change {
9797 self . range . is_some ( ) && self . text . len ( ) < self . range . unwrap ( ) . len ( ) . into ( )
9898 }
9999
100- pub fn apply_to_text ( & self , text : & String ) -> String {
100+ pub fn apply_to_text ( & self , text : & str ) -> String {
101101 if self . range . is_none ( ) {
102102 return self . text . clone ( ) ;
103103 }
@@ -122,14 +122,10 @@ impl Change {
122122 changed_statements. extend (
123123 doc. drain_statements ( )
124124 . into_iter ( )
125- . map ( |s| StatementChange :: Deleted ( s ) ) ,
125+ . map ( StatementChange :: Deleted ) ,
126126 ) ;
127127 // TODO also use errors returned by extract sql statement ranges
128- doc. statement_ranges = pg_statement_splitter:: split ( & self . text )
129- . ranges
130- . iter ( )
131- . map ( |r| r. clone ( ) )
132- . collect ( ) ;
128+ doc. statement_ranges = pg_statement_splitter:: split ( & self . text ) . ranges . to_vec ( ) ;
133129 doc. text = self . text . clone ( ) ;
134130 doc. line_index = LineIndex :: new ( & doc. text ) ;
135131
@@ -155,7 +151,7 @@ impl Change {
155151 changed_statements. push ( StatementChange :: Modified ( ChangedStatement {
156152 statement : StatementRef {
157153 idx : pos,
158- text : doc. text [ r . clone ( ) ] . to_string ( ) ,
154+ text : doc. text [ * r ] . to_string ( ) ,
159155 document_url : doc. url . clone ( ) ,
160156 } ,
161157 // change must be relative to statement
@@ -166,15 +162,9 @@ impl Change {
166162 // if addition, expand the range
167163 // if deletion, shrink the range
168164 if self . is_addition ( ) {
169- * r = TextRange :: new (
170- r. start ( ) ,
171- r. end ( ) + TextSize :: from ( self . diff_size ( ) ) ,
172- ) ;
165+ * r = TextRange :: new ( r. start ( ) , r. end ( ) + self . diff_size ( ) ) ;
173166 } else if self . is_deletion ( ) {
174- * r = TextRange :: new (
175- r. start ( ) ,
176- r. end ( ) - TextSize :: from ( self . diff_size ( ) ) ,
177- ) ;
167+ * r = TextRange :: new ( r. start ( ) , r. end ( ) - self . diff_size ( ) ) ;
178168 }
179169 } else if self . is_addition ( ) {
180170 * r += self . diff_size ( ) ;
@@ -206,7 +196,7 @@ impl Change {
206196 {
207197 changed_statements. push ( StatementChange :: Deleted ( StatementRef {
208198 idx,
209- text : doc. text [ r . clone ( ) ] . to_string ( ) ,
199+ text : doc. text [ * r ] . to_string ( ) ,
210200 document_url : doc. url . clone ( ) ,
211201 } ) ) ;
212202
@@ -344,15 +334,14 @@ mod tests {
344334 assert_eq ! ( d. statement_ranges. len( ) , 2 ) ;
345335
346336 for r in & pg_statement_splitter:: split ( & d. text ) . ranges {
347- assert_eq ! (
348- d. statement_ranges. iter( ) . position( |x| r == x) . is_some( ) ,
349- true ,
337+ assert ! (
338+ d. statement_ranges. iter( ) . any( |x| r == x) ,
350339 "should have stmt with range {:#?}" ,
351340 r
352341 ) ;
353342 }
354343
355- assert_eq ! ( d. statement_ranges[ 0 ] , TextRange :: new( 0 . into( ) , 26 . into( ) ) ) ;
344+ assert_eq ! ( d. statement_ranges[ 0 ] , TextRange :: new( 0 . into( ) , 25 . into( ) ) ) ;
356345 assert_eq ! ( d. statement_ranges[ 1 ] , TextRange :: new( 26 . into( ) , 35 . into( ) ) ) ;
357346 }
358347
@@ -364,8 +353,8 @@ mod tests {
364353
365354 assert_eq ! ( d. statement_ranges. len( ) , 2 ) ;
366355
367- let stmt_1_range = d. statement_ranges [ 0 ] . clone ( ) ;
368- let stmt_2_range = d. statement_ranges [ 1 ] . clone ( ) ;
356+ let stmt_1_range = d. statement_ranges [ 0 ] ;
357+ let stmt_2_range = d. statement_ranges [ 1 ] ;
369358
370359 let update_text = " contacts;" ;
371360
@@ -522,8 +511,8 @@ mod tests {
522511
523512 assert_eq ! ( d. statement_ranges. len( ) , 2 ) ;
524513
525- let stmt_1_range = d. statement_ranges [ 0 ] . clone ( ) ;
526- let stmt_2_range = d. statement_ranges [ 1 ] . clone ( ) ;
514+ let stmt_1_range = d. statement_ranges [ 0 ] ;
515+ let stmt_2_range = d. statement_ranges [ 1 ] ;
527516
528517 let update_text = ",test" ;
529518
0 commit comments