@@ -127,6 +127,8 @@ pub struct TreeDiff {
127127
128128impl TreeDiff {
129129 pub fn into_text_edit ( & self , builder : & mut TextEditBuilder ) {
130+ let _p = profile:: span ( "into_text_edit" ) ;
131+
130132 for ( anchor, to) in self . insertions . iter ( ) {
131133 let offset = match anchor {
132134 TreeDiffInsertPos :: After ( it) => it. text_range ( ) . end ( ) ,
@@ -154,6 +156,8 @@ impl TreeDiff {
154156///
155157/// This function tries to find a fine-grained diff.
156158pub fn diff ( from : & SyntaxNode , to : & SyntaxNode ) -> TreeDiff {
159+ let _p = profile:: span ( "diff" ) ;
160+
157161 let mut diff = TreeDiff {
158162 replacements : FxHashMap :: default ( ) ,
159163 insertions : FxIndexMap :: default ( ) ,
@@ -467,6 +471,8 @@ impl<'a> SyntaxRewriter<'a> {
467471 }
468472
469473 pub fn rewrite ( & self , node : & SyntaxNode ) -> SyntaxNode {
474+ let _p = profile:: span ( "rewrite" ) ;
475+
470476 if self . f . is_none ( ) && self . replacements . is_empty ( ) && self . insertions . is_empty ( ) {
471477 return node. clone ( ) ;
472478 }
@@ -483,6 +489,7 @@ impl<'a> SyntaxRewriter<'a> {
483489 ///
484490 /// Returns `None` when there are no replacements.
485491 pub fn rewrite_root ( & self ) -> Option < SyntaxNode > {
492+ let _p = profile:: span ( "rewrite_root" ) ;
486493 fn element_to_node_or_parent ( element : & SyntaxElement ) -> SyntaxNode {
487494 match element {
488495 SyntaxElement :: Node ( it) => it. clone ( ) ,
@@ -517,6 +524,8 @@ impl<'a> SyntaxRewriter<'a> {
517524 }
518525
519526 fn rewrite_children ( & self , node : & SyntaxNode ) -> SyntaxNode {
527+ let _p = profile:: span ( "rewrite_children" ) ;
528+
520529 // FIXME: this could be made much faster.
521530 let mut new_children = Vec :: new ( ) ;
522531 if let Some ( elements) = self . insertions ( & InsertPos :: FirstChildOf ( node. clone ( ) ) ) {
@@ -533,6 +542,8 @@ impl<'a> SyntaxRewriter<'a> {
533542 acc : & mut Vec < NodeOrToken < rowan:: GreenNode , rowan:: GreenToken > > ,
534543 element : & SyntaxElement ,
535544 ) {
545+ let _p = profile:: span ( "rewrite_self" ) ;
546+
536547 if let Some ( replacement) = self . replacement ( & element) {
537548 match replacement {
538549 Replacement :: Single ( element) => acc. push ( element_to_green ( element) ) ,
@@ -588,6 +599,8 @@ fn with_children(
588599 parent : & SyntaxNode ,
589600 new_children : Vec < NodeOrToken < rowan:: GreenNode , rowan:: GreenToken > > ,
590601) -> SyntaxNode {
602+ let _p = profile:: span ( "with_children" ) ;
603+
591604 let len = new_children. iter ( ) . map ( |it| it. text_len ( ) ) . sum :: < TextSize > ( ) ;
592605 let new_node = rowan:: GreenNode :: new ( rowan:: SyntaxKind ( parent. kind ( ) as u16 ) , new_children) ;
593606 let new_root_node = parent. replace_with ( new_node) ;
0 commit comments