1818)
1919
2020
21- def  _shift (cursor : Cursors , edit : BaseRangeEdit ) ->  Tuple [WTF8Pos , WTF8Pos ]:
21+ def  _shift_or_reject (
22+     cursor : Cursors , edit : BaseRangeEdit 
23+ ) ->  Optional [Tuple [WTF8Pos , WTF8Pos ]]:
2224    row , u8 , u16 , u32  =  cursor 
2325    if  edit .encoding  ==  UTF16 :
2426        col  =  u16 
@@ -30,6 +32,9 @@ def _shift(cursor: Cursors, edit: BaseRangeEdit) -> Tuple[WTF8Pos, WTF8Pos]:
3032        never (edit .encoding )
3133
3234    (b_row , b_col ), (e_row , e_col ) =  edit .begin , edit .end 
35+     if  e_col  <  col :
36+         return  None 
37+ 
3338    edit_col  =  edit .cursor_pos 
3439    diff  =  col  -  edit_col 
3540
@@ -53,7 +58,7 @@ def _shift(cursor: Cursors, edit: BaseRangeEdit) -> Tuple[WTF8Pos, WTF8Pos]:
5358    return  new_begin , new_end 
5459
5560
56- def  sanitize (inline_shift :  bool ,  cursor : Cursors , edit : Edit ) ->  Optional [Edit ]:
61+ def  sanitize (cursor : Cursors , edit : Edit ) ->  Optional [Edit ]:
5762    row , * _  =  cursor 
5863    if  isinstance (edit , SnippetRangeEdit ):
5964        if  row  ==  - 1 :
@@ -67,17 +72,17 @@ def sanitize(inline_shift: bool, cursor: Cursors, edit: Edit) -> Optional[Edit]:
6772            return  SnippetEdit (grammar = edit .grammar , new_text = fallback )
6873        elif  not  requires_snip (edit .new_text ):
6974            return  Edit (new_text = edit .new_text )
70-         else :
71-             begin , end  =  _shift ( cursor ,  edit = edit ) 
75+         elif   shift   :=   _shift_or_reject ( cursor ,  edit = edit ) :
76+             begin , end  =  shift 
7277            return  replace (edit , begin = begin , end = end )
78+         else :
79+             return  None 
7380    elif  isinstance (edit , RangeEdit ):
74-         if  inline_shift :
75-             begin , end  =  _shift (cursor , edit = edit )
76-             return  replace (edit , begin = begin , end = end )
77-         elif  fallback  :=  edit .fallback :
81+         if  fallback  :=  edit .fallback :
7882            return  Edit (new_text = fallback )
79-         elif  not  requires_snip (edit .new_text ):
80-             return  Edit (new_text = edit .new_text )
83+         elif  shift  :=  _shift_or_reject (cursor , edit = edit ):
84+             begin , end  =  shift 
85+             return  replace (edit , begin = begin , end = end )
8186        else :
8287            return  None 
8388    elif  isinstance (edit , SnippetEdit ):
0 commit comments