@@ -142,6 +142,15 @@ pub fn diff(from: &SyntaxNode, to: &SyntaxNode) -> TreeDiff {
142142/// This is a type-unsafe low-level editing API, if you need to use it,
143143/// prefer to create a type-safe abstraction on top of it instead.
144144pub fn insert_children (
145+ parent : & SyntaxNode ,
146+ position : InsertPosition < SyntaxElement > ,
147+ to_insert : impl IntoIterator < Item = SyntaxElement > ,
148+ ) -> SyntaxNode {
149+ let mut to_insert = to_insert. into_iter ( ) ;
150+ _insert_children ( parent, position, & mut to_insert)
151+ }
152+
153+ fn _insert_children (
145154 parent : & SyntaxNode ,
146155 position : InsertPosition < SyntaxElement > ,
147156 to_insert : & mut dyn Iterator < Item = SyntaxElement > ,
@@ -176,6 +185,15 @@ pub fn insert_children(
176185/// This is a type-unsafe low-level editing API, if you need to use it,
177186/// prefer to create a type-safe abstraction on top of it instead.
178187pub fn replace_children (
188+ parent : & SyntaxNode ,
189+ to_delete : RangeInclusive < SyntaxElement > ,
190+ to_insert : impl IntoIterator < Item = SyntaxElement > ,
191+ ) -> SyntaxNode {
192+ let mut to_insert = to_insert. into_iter ( ) ;
193+ _replace_children ( parent, to_delete, & mut to_insert)
194+ }
195+
196+ fn _replace_children (
179197 parent : & SyntaxNode ,
180198 to_delete : RangeInclusive < SyntaxElement > ,
181199 to_insert : & mut dyn Iterator < Item = SyntaxElement > ,
@@ -202,14 +220,21 @@ pub fn replace_children(
202220/// to create a type-safe abstraction on top of it instead.
203221pub fn replace_descendants (
204222 parent : & SyntaxNode ,
205- map : & impl Fn ( & SyntaxElement ) -> Option < SyntaxElement > ,
223+ map : impl Fn ( & SyntaxElement ) -> Option < SyntaxElement > ,
224+ ) -> SyntaxNode {
225+ _replace_descendants ( parent, & map)
226+ }
227+
228+ fn _replace_descendants (
229+ parent : & SyntaxNode ,
230+ map : & dyn Fn ( & SyntaxElement ) -> Option < SyntaxElement > ,
206231) -> SyntaxNode {
207232 // FIXME: this could be made much faster.
208233 let new_children = parent. children_with_tokens ( ) . map ( |it| go ( map, it) ) . collect :: < Vec < _ > > ( ) ;
209234 return with_children ( parent, new_children) ;
210235
211236 fn go (
212- map : & impl Fn ( & SyntaxElement ) -> Option < SyntaxElement > ,
237+ map : & dyn Fn ( & SyntaxElement ) -> Option < SyntaxElement > ,
213238 element : SyntaxElement ,
214239 ) -> NodeOrToken < rowan:: GreenNode , rowan:: GreenToken > {
215240 if let Some ( replacement) = map ( & element) {
@@ -221,7 +246,7 @@ pub fn replace_descendants(
221246 match element {
222247 NodeOrToken :: Token ( it) => NodeOrToken :: Token ( it. green ( ) . clone ( ) ) ,
223248 NodeOrToken :: Node ( it) => {
224- NodeOrToken :: Node ( replace_descendants ( & it, map) . green ( ) . clone ( ) )
249+ NodeOrToken :: Node ( _replace_descendants ( & it, map) . green ( ) . clone ( ) )
225250 }
226251 }
227252 }
0 commit comments