@@ -215,15 +215,40 @@ pub(super) fn apply_edits(editor: SyntaxEditor) -> SyntaxEdit {
215215 * node = node. clone_for_update ( ) ;
216216 }
217217 }
218+ Change :: Insert ( _, SyntaxElement :: Token ( token) )
219+ | Change :: Replace ( _, Some ( SyntaxElement :: Token ( token) ) ) => {
220+ if let Some ( parent) = token. parent ( ) {
221+ let idx = token. index ( ) ;
222+ let new_parent = parent. clone_subtree ( ) . clone_for_update ( ) ;
223+ * token = new_parent
224+ . children_with_tokens ( )
225+ . nth ( idx)
226+ . and_then ( SyntaxElement :: into_token)
227+ . unwrap ( ) ;
228+ }
229+ }
218230 Change :: InsertAll ( _, elements)
219231 | Change :: ReplaceWithMany ( _, elements)
220232 | Change :: ReplaceAll ( _, elements) => {
221233 for element in elements {
222- if let SyntaxElement :: Node ( node) = element {
223- if node. parent ( ) . is_some ( ) {
224- * node = node. clone_subtree ( ) . clone_for_update ( ) ;
225- } else if !node. is_mutable ( ) {
226- * node = node. clone_for_update ( ) ;
234+ match element {
235+ SyntaxElement :: Node ( node) => {
236+ if node. parent ( ) . is_some ( ) {
237+ * node = node. clone_subtree ( ) . clone_for_update ( ) ;
238+ } else if !node. is_mutable ( ) {
239+ * node = node. clone_for_update ( ) ;
240+ }
241+ }
242+ SyntaxElement :: Token ( token) => {
243+ if let Some ( parent) = token. parent ( ) {
244+ let idx = token. index ( ) ;
245+ let new_parent = parent. clone_subtree ( ) . clone_for_update ( ) ;
246+ * token = new_parent
247+ . children_with_tokens ( )
248+ . nth ( idx)
249+ . and_then ( SyntaxElement :: into_token)
250+ . unwrap ( ) ;
251+ }
227252 }
228253 }
229254 }
0 commit comments