From 65571d73a7a8d4002af01e89f60157d52ba4f236 Mon Sep 17 00:00:00 2001 From: Dunqing Date: Wed, 21 Feb 2024 12:11:16 +0800 Subject: [PATCH] fix(vscode): incorrect diagnostic position (#2461) fix: #2456 --- crates/oxc_language_server/src/linter.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/oxc_language_server/src/linter.rs b/crates/oxc_language_server/src/linter.rs index 0cd3cd8a4..d187a41c3 100644 --- a/crates/oxc_language_server/src/linter.rs +++ b/crates/oxc_language_server/src/linter.rs @@ -369,8 +369,10 @@ fn get_valid_extensions() -> Vec<&'static str> { #[allow(clippy::cast_possible_truncation)] fn offset_to_position(offset: usize, source_text: &str) -> Option { let rope = Rope::from_str(source_text); - let line = rope.try_char_to_line(offset).ok()?; + let line = rope.try_byte_to_line(offset).ok()?; let first_char_of_line = rope.try_line_to_char(line).ok()?; + // Original offset is byte, but Rope uses char offset + let offset = rope.try_byte_to_char(offset).ok()?; let column = offset - first_char_of_line; Some(Position::new(line as u32, column as u32)) }