@@ -16,7 +16,7 @@ use rustc_hash::FxHashMap;
1616
1717use crate :: {
1818 AstNode , SyntaxElement , SyntaxKind , SyntaxNode , SyntaxToken , T ,
19- ast:: { self , edit:: IndentLevel , make } ,
19+ ast:: { self , edit:: IndentLevel , syntax_factory :: SyntaxFactory } ,
2020} ;
2121
2222mod edit_algo;
@@ -104,22 +104,28 @@ impl SyntaxEditor {
104104 self . changes . push ( Change :: InsertAll ( position, elements) )
105105 }
106106
107- pub fn insert_with_whitespace ( & mut self , position : Position , element : impl Element ) {
108- self . insert_all_with_whitespace ( position, vec ! [ element. syntax_element( ) ] )
107+ pub fn insert_with_whitespace (
108+ & mut self ,
109+ position : Position ,
110+ element : impl Element ,
111+ factory : & SyntaxFactory ,
112+ ) {
113+ self . insert_all_with_whitespace ( position, vec ! [ element. syntax_element( ) ] , factory)
109114 }
110115
111116 pub fn insert_all_with_whitespace (
112117 & mut self ,
113118 position : Position ,
114119 mut elements : Vec < SyntaxElement > ,
120+ factory : & SyntaxFactory ,
115121 ) {
116122 if let Some ( first) = elements. first ( )
117- && let Some ( ws) = ws_before ( & position, first)
123+ && let Some ( ws) = ws_before ( & position, first, factory )
118124 {
119125 elements. insert ( 0 , ws. into ( ) ) ;
120126 }
121127 if let Some ( last) = elements. last ( )
122- && let Some ( ws) = ws_after ( & position, last)
128+ && let Some ( ws) = ws_after ( & position, last, factory )
123129 {
124130 elements. push ( ws. into ( ) ) ;
125131 }
@@ -437,7 +443,11 @@ impl Element for SyntaxToken {
437443 }
438444}
439445
440- fn ws_before ( position : & Position , new : & SyntaxElement ) -> Option < SyntaxToken > {
446+ fn ws_before (
447+ position : & Position ,
448+ new : & SyntaxElement ,
449+ factory : & SyntaxFactory ,
450+ ) -> Option < SyntaxToken > {
441451 let prev = match & position. repr {
442452 PositionRepr :: FirstChild ( _) => return None ,
443453 PositionRepr :: After ( it) => it,
@@ -449,7 +459,7 @@ fn ws_before(position: &Position, new: &SyntaxElement) -> Option<SyntaxToken> {
449459 {
450460 let mut indent = IndentLevel :: from_element ( & item_list. syntax ( ) . clone ( ) . into ( ) ) ;
451461 indent. 0 += 1 ;
452- return Some ( make :: tokens :: whitespace ( & format ! ( "\n {indent}" ) ) ) ;
462+ return Some ( factory . whitespace ( & format ! ( "\n {indent}" ) ) ) ;
453463 }
454464
455465 if prev. kind ( ) == T ! [ '{' ]
@@ -458,21 +468,29 @@ fn ws_before(position: &Position, new: &SyntaxElement) -> Option<SyntaxToken> {
458468 {
459469 let mut indent = IndentLevel :: from_element ( & stmt_list. syntax ( ) . clone ( ) . into ( ) ) ;
460470 indent. 0 += 1 ;
461- return Some ( make :: tokens :: whitespace ( & format ! ( "\n {indent}" ) ) ) ;
471+ return Some ( factory . whitespace ( & format ! ( "\n {indent}" ) ) ) ;
462472 }
463473
464- ws_between ( prev, new)
474+ ws_between ( prev, new, factory )
465475}
466476
467- fn ws_after ( position : & Position , new : & SyntaxElement ) -> Option < SyntaxToken > {
477+ fn ws_after (
478+ position : & Position ,
479+ new : & SyntaxElement ,
480+ factory : & SyntaxFactory ,
481+ ) -> Option < SyntaxToken > {
468482 let next = match & position. repr {
469483 PositionRepr :: FirstChild ( parent) => parent. first_child_or_token ( ) ?,
470484 PositionRepr :: After ( sibling) => sibling. next_sibling_or_token ( ) ?,
471485 } ;
472- ws_between ( new, & next)
486+ ws_between ( new, & next, factory )
473487}
474488
475- fn ws_between ( left : & SyntaxElement , right : & SyntaxElement ) -> Option < SyntaxToken > {
489+ fn ws_between (
490+ left : & SyntaxElement ,
491+ right : & SyntaxElement ,
492+ factory : & SyntaxFactory ,
493+ ) -> Option < SyntaxToken > {
476494 if left. kind ( ) == SyntaxKind :: WHITESPACE || right. kind ( ) == SyntaxKind :: WHITESPACE {
477495 return None ;
478496 }
@@ -493,16 +511,16 @@ fn ws_between(left: &SyntaxElement, right: &SyntaxElement) -> Option<SyntaxToken
493511 if left. kind ( ) == SyntaxKind :: USE {
494512 indent. 0 = IndentLevel :: from_element ( right) . 0 . max ( indent. 0 ) ;
495513 }
496- return Some ( make :: tokens :: whitespace ( & format ! ( "\n {indent}" ) ) ) ;
514+ return Some ( factory . whitespace ( & format ! ( "\n {indent}" ) ) ) ;
497515 }
498516 if left. kind ( ) == SyntaxKind :: ATTR {
499517 let mut indent = IndentLevel :: from_element ( right) ;
500518 if right. kind ( ) == SyntaxKind :: ATTR {
501519 indent. 0 = IndentLevel :: from_element ( left) . 0 . max ( indent. 0 ) ;
502520 }
503- return Some ( make :: tokens :: whitespace ( & format ! ( "\n {indent}" ) ) ) ;
521+ return Some ( factory . whitespace ( & format ! ( "\n {indent}" ) ) ) ;
504522 }
505- Some ( make :: tokens :: single_space ( ) )
523+ Some ( factory . whitespace ( " " ) )
506524}
507525
508526fn is_ancestor_or_self ( node : & SyntaxNode , ancestor : & SyntaxNode ) -> bool {
0 commit comments