Skip to content

Commit 9f5de0f

Browse files
authored
Merge pull request #260 from epage/lines
fix: Count lines correctly
2 parents 8cb17d1 + 2b56991 commit 9f5de0f

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
77
<!-- next-header -->
88
## [Unreleased] - ReleaseDate
99

10+
#### Bug Fixes
11+
12+
- Line numbers were off by `1 + <number of prior typos>`
13+
1014
## [1.0.0] - 2021-05-25
1115

1216
## [0.4.0] - 2021-05-21

src/file.rs

+26-1
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ impl AccumulateLineNum {
502502
fn line_num(&mut self, buffer: &[u8], byte_offset: usize) -> usize {
503503
assert!(self.last_offset <= byte_offset);
504504
let slice = &buffer[self.last_offset..byte_offset];
505-
let newlines = slice.lines().count();
505+
let newlines = slice.find_iter(b"\n").count();
506506
let line_num = self.line_num + newlines;
507507
self.line_num = line_num;
508508
self.last_offset = byte_offset;
@@ -675,6 +675,31 @@ mod test {
675675
assert_eq!(actual, "foo happy world");
676676
}
677677

678+
#[test]
679+
fn test_line_count_first() {
680+
let mut accum_line_num = AccumulateLineNum::new();
681+
let line_num = accum_line_num.line_num(b"hello world", 6);
682+
assert_eq!(line_num, 1);
683+
}
684+
685+
#[test]
686+
fn test_line_count_second() {
687+
let mut accum_line_num = AccumulateLineNum::new();
688+
let line_num = accum_line_num.line_num(b"1\n2\n3", 2);
689+
assert_eq!(line_num, 2);
690+
}
691+
692+
#[test]
693+
fn test_line_count_multiple() {
694+
let mut accum_line_num = AccumulateLineNum::new();
695+
let line_num = accum_line_num.line_num(b"1\n2\n3", 0);
696+
assert_eq!(line_num, 1);
697+
let line_num = accum_line_num.line_num(b"1\n2\n3", 2);
698+
assert_eq!(line_num, 2);
699+
let line_num = accum_line_num.line_num(b"1\n2\n3", 4);
700+
assert_eq!(line_num, 3);
701+
}
702+
678703
#[test]
679704
fn test_extract_line_single_line() {
680705
let (line, offset) = extract_line(b"hello world", 6);

0 commit comments

Comments
 (0)