Skip to content

Commit 349fb98

Browse files
GearsDatapackslpil
authored andcommitted
Add tests
1 parent ba910aa commit 349fb98

File tree

1 file changed

+53
-12
lines changed

1 file changed

+53
-12
lines changed

compiler-core/src/line_numbers.rs

Lines changed: 53 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,18 +51,6 @@ impl LineNumbers {
5151
+ 1
5252
}
5353

54-
pub fn line_and_column_number_utf8(&self, byte_index: u32) -> LineColumn {
55-
let line = self.line_number(byte_index);
56-
let column = byte_index
57-
- self
58-
.line_starts
59-
.get(line as usize - 1)
60-
.copied()
61-
.unwrap_or_default()
62-
+ 1;
63-
LineColumn { line, column }
64-
}
65-
6654
pub fn line_and_column_number(&self, byte_index: u32) -> LineColumn {
6755
let line = self.line_number(byte_index);
6856
let line_start = self
@@ -138,6 +126,59 @@ pub fn main() {
138126
assert_eq!(line_numbers.byte_index(2, 1), 18);
139127
}
140128

129+
// https://github.com/gleam-lang/gleam/issues/3628
130+
#[test]
131+
fn byte_index_with_multibyte_characters() {
132+
let src = r#"fn wibble(_a, _b, _c) {
133+
todo
134+
}
135+
136+
pub fn main() {
137+
wibble("क्षि", 10, <<"abc">>)
138+
}
139+
"#;
140+
let line_numbers = LineNumbers::new(src);
141+
142+
assert_eq!(line_numbers.byte_index(1, 6), 30);
143+
assert_eq!(line_numbers.byte_index(5, 2), 52);
144+
assert_eq!(line_numbers.byte_index(5, 17), 75);
145+
assert_eq!(line_numbers.byte_index(6, 1), 91);
146+
}
147+
148+
// https://github.com/gleam-lang/gleam/issues/3628
149+
#[test]
150+
fn line_and_column_with_multibyte_characters() {
151+
let src = r#"fn wibble(_a, _b, _c) {
152+
todo
153+
}
154+
155+
pub fn main() {
156+
wibble("क्षि", 10, <<"abc">>)
157+
}
158+
"#;
159+
let line_numbers = LineNumbers::new(src);
160+
161+
assert_eq!(
162+
line_numbers.line_and_column_number(30),
163+
LineColumn { line: 2, column: 7 }
164+
);
165+
assert_eq!(
166+
line_numbers.line_and_column_number(52),
167+
LineColumn { line: 6, column: 3 }
168+
);
169+
assert_eq!(
170+
line_numbers.line_and_column_number(75),
171+
LineColumn {
172+
line: 6,
173+
column: 18
174+
}
175+
);
176+
assert_eq!(
177+
line_numbers.line_and_column_number(91),
178+
LineColumn { line: 7, column: 2 }
179+
);
180+
}
181+
141182
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
142183
pub struct LineColumn {
143184
pub line: u32,

0 commit comments

Comments
 (0)