From 696f1d2dbb73041f2f669609dac2e7d2573093e6 Mon Sep 17 00:00:00 2001 From: Markus Westerlind Date: Sun, 12 Jul 2020 22:22:21 +0200 Subject: [PATCH] fix: Handle unicode in codespan_lsp outside of the first line --- codespan-lsp/src/lib.rs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/codespan-lsp/src/lib.rs b/codespan-lsp/src/lib.rs index 26f3937..6e79f84 100644 --- a/codespan-lsp/src/lib.rs +++ b/codespan-lsp/src/lib.rs @@ -229,8 +229,9 @@ where let source = source.as_ref(); let line_span = files.line_range(file_id, position.line as usize).unwrap(); + let line_str = source.get(line_span.clone()).unwrap(); - let byte_offset = character_to_line_offset(source, position.character)?; + let byte_offset = character_to_line_offset(line_str, position.character)?; Ok(line_span.start + byte_offset) } @@ -314,7 +315,8 @@ test #[test] fn unicode_get_position() { let mut files = SimpleFiles::new(); - let file_id = files.add("unicode", UNICODE); + let file_id = files.add("unicode", UNICODE.to_string()); + let file_id2 = files.add("unicode newline", "\n".to_string() + UNICODE); let result = byte_index_to_position(&files, file_id, 5); assert_eq!( @@ -333,5 +335,14 @@ test character: 6, }) ); + + let result = byte_index_to_position(&files, file_id2, 11); + assert_eq!( + result, + Ok(LspPosition { + line: 1, + character: 6, + }) + ); } }