@@ -89,14 +89,11 @@ fn test_tree_edit() {
8989 let child2 = expr. child ( 1 ) . unwrap ( ) ;
9090
9191 assert ! ( expr. has_changes( ) ) ;
92- assert_eq ! ( expr. start_byte( ) , 4 ) ;
93- assert_eq ! ( expr. end_byte( ) , 17 ) ;
92+ assert_eq ! ( expr. byte_range( ) , 4 ..17 ) ;
9493 assert ! ( child1. has_changes( ) ) ;
95- assert_eq ! ( child1. start_byte( ) , 4 ) ;
96- assert_eq ! ( child1. end_byte( ) , 7 ) ;
94+ assert_eq ! ( child1. byte_range( ) , 4 ..7 ) ;
9795 assert ! ( !child2. has_changes( ) ) ;
98- assert_eq ! ( child2. start_byte( ) , 9 ) ;
99- assert_eq ! ( child2. end_byte( ) , 12 ) ;
96+ assert_eq ! ( child2. byte_range( ) , 9 ..12 ) ;
10097 }
10198
10299 // replacement starting at the edge of the tree's padding:
@@ -117,14 +114,11 @@ fn test_tree_edit() {
117114 let child2 = expr. child ( 1 ) . unwrap ( ) ;
118115
119116 assert ! ( expr. has_changes( ) ) ;
120- assert_eq ! ( expr. start_byte( ) , 4 ) ;
121- assert_eq ! ( expr. end_byte( ) , 17 ) ;
117+ assert_eq ! ( expr. byte_range( ) , 4 ..17 ) ;
122118 assert ! ( child1. has_changes( ) ) ;
123- assert_eq ! ( child1. start_byte( ) , 4 ) ;
124- assert_eq ! ( child1. end_byte( ) , 7 ) ;
119+ assert_eq ! ( child1. byte_range( ) , 4 ..7 ) ;
125120 assert ! ( !child2. has_changes( ) ) ;
126- assert_eq ! ( child2. start_byte( ) , 9 ) ;
127- assert_eq ! ( child2. end_byte( ) , 12 ) ;
121+ assert_eq ! ( child2. byte_range( ) , 9 ..12 ) ;
128122 }
129123
130124 // deletion that spans more than one child node:
@@ -146,17 +140,13 @@ fn test_tree_edit() {
146140 let child3 = expr. child ( 2 ) . unwrap ( ) ;
147141
148142 assert ! ( expr. has_changes( ) ) ;
149- assert_eq ! ( expr. start_byte( ) , 4 ) ;
150- assert_eq ! ( expr. end_byte( ) , 8 ) ;
143+ assert_eq ! ( expr. byte_range( ) , 4 ..8 ) ;
151144 assert ! ( child1. has_changes( ) ) ;
152- assert_eq ! ( child1. start_byte( ) , 4 ) ;
153- assert_eq ! ( child1. end_byte( ) , 4 ) ;
145+ assert_eq ! ( child1. byte_range( ) , 4 ..4 ) ;
154146 assert ! ( child2. has_changes( ) ) ;
155- assert_eq ! ( child2. start_byte( ) , 4 ) ;
156- assert_eq ! ( child2. end_byte( ) , 4 ) ;
147+ assert_eq ! ( child2. byte_range( ) , 4 ..4 ) ;
157148 assert ! ( child3. has_changes( ) ) ;
158- assert_eq ! ( child3. start_byte( ) , 5 ) ;
159- assert_eq ! ( child3. end_byte( ) , 8 ) ;
149+ assert_eq ! ( child3. byte_range( ) , 5 ..8 ) ;
160150 }
161151
162152 // insertion at the end of the tree:
@@ -178,14 +168,67 @@ fn test_tree_edit() {
178168 let child3 = expr. child ( 2 ) . unwrap ( ) ;
179169
180170 assert ! ( expr. has_changes( ) ) ;
181- assert_eq ! ( expr. start_byte( ) , 2 ) ;
182- assert_eq ! ( expr. end_byte( ) , 16 ) ;
171+ assert_eq ! ( expr. byte_range( ) , 2 ..16 ) ;
183172 assert ! ( !child1. has_changes( ) ) ;
184- assert_eq ! ( child1. end_byte ( ) , 5 ) ;
173+ assert_eq ! ( child1. byte_range ( ) , 2 .. 5 ) ;
185174 assert ! ( !child2. has_changes( ) ) ;
186- assert_eq ! ( child2. end_byte( ) , 10 ) ;
175+ assert_eq ! ( child2. byte_range( ) , 7 ..10 ) ;
176+ assert ! ( child3. has_changes( ) ) ;
177+ assert_eq ! ( child3. byte_range( ) , 12 ..16 ) ;
178+ }
179+
180+ // replacement that starts within a token and extends beyond the end of the tree:
181+ // resize the token and empty out any subsequent child nodes.
182+ {
183+ let mut tree = tree. clone ( ) ;
184+ tree. edit ( & InputEdit {
185+ start_byte : 3 ,
186+ old_end_byte : 90 ,
187+ new_end_byte : 4 ,
188+ start_position : Point :: new ( 0 , 3 ) ,
189+ old_end_position : Point :: new ( 0 , 90 ) ,
190+ new_end_position : Point :: new ( 0 , 4 ) ,
191+ } ) ;
192+
193+ let expr = tree. root_node ( ) . child ( 0 ) . unwrap ( ) . child ( 0 ) . unwrap ( ) ;
194+ let child1 = expr. child ( 0 ) . unwrap ( ) ;
195+ let child2 = expr. child ( 1 ) . unwrap ( ) ;
196+ let child3 = expr. child ( 2 ) . unwrap ( ) ;
197+ assert_eq ! ( expr. byte_range( ) , 2 ..4 ) ;
198+ assert ! ( expr. has_changes( ) ) ;
199+ assert_eq ! ( child1. byte_range( ) , 2 ..4 ) ;
200+ assert ! ( child1. has_changes( ) ) ;
201+ assert_eq ! ( child2. byte_range( ) , 4 ..4 ) ;
202+ assert ! ( child2. has_changes( ) ) ;
203+ assert_eq ! ( child3. byte_range( ) , 4 ..4 ) ;
204+ assert ! ( child3. has_changes( ) ) ;
205+ }
206+
207+ // replacement that starts in whitespace and extends beyond the end of the tree:
208+ // shift the token's start position and empty out its content.
209+ {
210+ let mut tree = tree. clone ( ) ;
211+ tree. edit ( & InputEdit {
212+ start_byte : 6 ,
213+ old_end_byte : 90 ,
214+ new_end_byte : 8 ,
215+ start_position : Point :: new ( 0 , 6 ) ,
216+ old_end_position : Point :: new ( 0 , 90 ) ,
217+ new_end_position : Point :: new ( 0 , 8 ) ,
218+ } ) ;
219+
220+ let expr = tree. root_node ( ) . child ( 0 ) . unwrap ( ) . child ( 0 ) . unwrap ( ) ;
221+ let child1 = expr. child ( 0 ) . unwrap ( ) ;
222+ let child2 = expr. child ( 1 ) . unwrap ( ) ;
223+ let child3 = expr. child ( 2 ) . unwrap ( ) ;
224+ assert_eq ! ( expr. byte_range( ) , 2 ..8 ) ;
225+ assert ! ( expr. has_changes( ) ) ;
226+ assert_eq ! ( child1. byte_range( ) , 2 ..5 ) ;
227+ assert ! ( !child1. has_changes( ) ) ;
228+ assert_eq ! ( child2. byte_range( ) , 8 ..8 ) ;
229+ assert ! ( child2. has_changes( ) ) ;
230+ assert_eq ! ( child3. byte_range( ) , 8 ..8 ) ;
187231 assert ! ( child3. has_changes( ) ) ;
188- assert_eq ! ( child3. end_byte( ) , 16 ) ;
189232 }
190233}
191234
0 commit comments