File tree Expand file tree Collapse file tree 1 file changed +15
-11
lines changed
Expand file tree Collapse file tree 1 file changed +15
-11
lines changed Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments