From d3c2fed4b30f039b0c2226bdaf2ed5b94b7aa161 Mon Sep 17 00:00:00 2001 From: Will Lillis Date: Wed, 16 Jul 2025 00:27:18 -0400 Subject: [PATCH] fix(rust): correct indices for `Node::utf16_text` --- crates/cli/src/tests/text_provider_test.rs | 13 +++++++++++++ lib/binding_rust/lib.rs | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/crates/cli/src/tests/text_provider_test.rs b/crates/cli/src/tests/text_provider_test.rs index ffedc36b..d9ed454e 100644 --- a/crates/cli/src/tests/text_provider_test.rs +++ b/crates/cli/src/tests/text_provider_test.rs @@ -107,6 +107,19 @@ fn test_text_provider_for_arc_of_bytes_slice() { check_parsing(text.clone(), text.as_ref()); } +#[test] +fn test_text_provider_for_vec_utf16_text() { + let source_text = "你好".encode_utf16().collect::>(); + + let language = get_language("c"); + let mut parser = Parser::new(); + parser.set_language(&language).unwrap(); + let tree = parser.parse_utf16_le(&source_text, None).unwrap(); + + let tree_text = tree.root_node().utf16_text(&source_text); + assert_eq!(source_text, tree_text); +} + #[test] fn test_text_provider_callback_with_str_slice() { let text: &str = "// comment"; diff --git a/lib/binding_rust/lib.rs b/lib/binding_rust/lib.rs index a4cea362..f50c4495 100644 --- a/lib/binding_rust/lib.rs +++ b/lib/binding_rust/lib.rs @@ -2067,7 +2067,7 @@ impl<'tree> Node<'tree> { #[must_use] pub fn utf16_text<'a>(&self, source: &'a [u16]) -> &'a [u16] { - &source[self.start_byte()..self.end_byte()] + &source[self.start_byte() / 2..self.end_byte() / 2] } /// Create a new [`TreeCursor`] starting from this node.