From 539ed2dea4e5feb066658d22c3eada365c91385c Mon Sep 17 00:00:00 2001 From: KtorZ Date: Wed, 22 Feb 2023 17:33:13 +0100 Subject: [PATCH] Fix unicode char parsing in comments. --- crates/aiken-lang/src/parser/extra.rs | 11 ++++++++--- crates/aiken-lang/src/tests/format.rs | 13 +++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/crates/aiken-lang/src/parser/extra.rs b/crates/aiken-lang/src/parser/extra.rs index 0392bbcd..b7a04540 100644 --- a/crates/aiken-lang/src/parser/extra.rs +++ b/crates/aiken-lang/src/parser/extra.rs @@ -23,10 +23,15 @@ pub struct Comment<'a> { impl<'a> From<(&Span, &'a str)> for Comment<'a> { fn from(src: (&Span, &'a str)) -> Comment<'a> { - let start = src.0.start; - let end = src.0.end; + fn char_indice(s: &str, i: usize) -> usize { + s.char_indices().nth(i).expect("char at given indice").0 + } + + let start = char_indice(src.1, src.0.start); + let end = char_indice(src.1, src.0.end); + Comment { - start, + start: src.0.start, content: src.1.get(start..end).expect("From span to comment"), } } diff --git a/crates/aiken-lang/src/tests/format.rs b/crates/aiken-lang/src/tests/format.rs index 0e3b82a1..e1bebd43 100644 --- a/crates/aiken-lang/src/tests/format.rs +++ b/crates/aiken-lang/src/tests/format.rs @@ -547,3 +547,16 @@ fn test_string_literal() { assert_fmt(src, src); } + +#[test] +fn test_unicode() { + let src = indoc! {r#" + /// ∞ ★ ♩ ♫ ✓ + fn foo() { + trace @"∀💩" + Void + } + "#}; + + assert_fmt(src, src); +}