on master help sign in
fix didChange notifaction offset encoding
75f62bcPascal Kuthe
helix-lsp/src/client.rs+13−4
@@ -645,7 +645,11 @@ impl Client {
645 // Calculation is therefore a bunch trickier.
645 // Calculation is therefore a bunch trickier.
646
646
647 use helix_core::RopeSlice;
647 use helix_core::RopeSlice;
648+ fn traverse(
648− fn traverse(pos: lsp::Position, text: RopeSlice) -> lsp::Position {
649+ pos: lsp::Position,
650+ text: RopeSlice,
651+ offset_encoding: OffsetEncoding,
652+ ) -> lsp::Position {
649 let lsp::Position {
653 let lsp::Position {
650 mut line,
654 mut line,
651 mut character,
655 mut character,
@@ -662,7 +666,11 @@ impl Client {
662 line += 1;
666 line += 1;
663 character = 0;
667 character = 0;
664 } else {
668 } else {
669+ character += match offset_encoding {
670+ OffsetEncoding::Utf8 => ch.len_utf8() as u32,
665− character += ch.len_utf16() as u32;
671+ OffsetEncoding::Utf16 => ch.len_utf16() as u32,
672+ OffsetEncoding::Utf32 => 1,
673+ };
666 }
674 }
667 }
675 }
668 lsp::Position { line, character }
676 lsp::Position { line, character }
@@ -683,7 +691,7 @@ impl Client {
683 }
691 }
684 Delete(_) => {
692 Delete(_) => {
685 let start = pos_to_lsp_pos(new_text, new_pos, offset_encoding);
693 let start = pos_to_lsp_pos(new_text, new_pos, offset_encoding);
686− let end = traverse(start, old_text.slice(old_pos..old_end));
694+ let end = traverse(start, old_text.slice(old_pos..old_end), offset_encoding);
687
695
688 // deletion
696 // deletion
689 changes.push(lsp::TextDocumentContentChangeEvent {
697 changes.push(lsp::TextDocumentContentChangeEvent {
@@ -700,7 +708,8 @@ impl Client {
700 // a subsequent delete means a replace, consume it
708 // a subsequent delete means a replace, consume it
701 let end = if let Some(Delete(len)) = iter.peek() {
709 let end = if let Some(Delete(len)) = iter.peek() {
702 old_end = old_pos + len;
710 old_end = old_pos + len;
711+ let end =
703− let end = traverse(start, old_text.slice(old_pos..old_end));
712+ traverse(start, old_text.slice(old_pos..old_end), offset_encoding);
704
713
705 iter.next();
714 iter.next();
706
715