pub trait RopeExt {
    fn apply_edit(&mut self, edit: &TextEdit<'_>);
    fn build_edit<'a>(
        &self,
        change: &'a TextDocumentContentChangeEvent
    ) -> Result<TextEdit<'a>>;
    fn byte_to_lsp_position(&self, offset: usize) -> Position;
    fn chunk_walker(self, byte_idx: usize) -> ChunkWalker;
    fn lsp_position_to_core(&self, position: Position) -> Result<TextPosition>;
    fn lsp_position_to_utf16_cu(&self, position: Position) -> Result<u32>;
}