Skip to content

Commit ba910aa

Browse files
GearsDatapackslpil
authored andcommitted
Fix line numbers calculations
1 parent 8e6bed5 commit ba910aa

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

compiler-core/src/line_numbers.rs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -64,14 +64,18 @@ impl LineNumbers {
6464
}
6565

6666
pub fn line_and_column_number(&self, byte_index: u32) -> LineColumn {
67-
let mut line_and_column = self.line_and_column_number_utf8(byte_index);
67+
let line = self.line_number(byte_index);
68+
let line_start = self
69+
.line_starts
70+
.get(line as usize - 1)
71+
.copied()
72+
.unwrap_or_default();
6873

69-
let mut u8_offset = 0;
74+
let mut u8_offset = line_start;
7075
let mut u16_offset = 0;
71-
let target = line_and_column.column - 1;
7276

7377
loop {
74-
if u8_offset >= target {
78+
if u8_offset >= byte_index {
7579
break;
7680
}
7781

@@ -84,9 +88,10 @@ impl LineNumbers {
8488
}
8589
}
8690

87-
line_and_column.column = u16_offset + 1;
88-
89-
line_and_column
91+
LineColumn {
92+
line,
93+
column: u16_offset + 1,
94+
}
9095
}
9196

9297
/// 0 indexed line and character to byte index
@@ -96,12 +101,11 @@ impl LineNumbers {
96101
None => return self.length,
97102
};
98103

99-
let mut u8_offset = 0;
104+
let mut u8_offset = line_start;
100105
let mut u16_offset = 0;
101-
let target = character;
102106

103107
loop {
104-
if u16_offset >= target {
108+
if u16_offset >= character {
105109
break;
106110
}
107111

@@ -114,7 +118,7 @@ impl LineNumbers {
114118
}
115119
}
116120

117-
line_start + u8_offset
121+
u8_offset
118122
}
119123
}
120124

0 commit comments

Comments
 (0)