mirror of
https://github.com/BurntSushi/ripgrep.git
synced 2025-05-13 21:26:27 +02:00
Fix reiteration of the first found match with --only-mathing flag
Fixes #451
This commit is contained in:
parent
c50b8b4125
commit
362abed44a
@ -242,23 +242,13 @@ impl<W: WriteColor> Printer<W> {
|
|||||||
line_number: Option<u64>,
|
line_number: Option<u64>,
|
||||||
) {
|
) {
|
||||||
if !self.line_per_match && !self.only_matching {
|
if !self.line_per_match && !self.only_matching {
|
||||||
let column =
|
let column = re.find(&buf[start..end])
|
||||||
if self.column {
|
.map(|m| m.start()).unwrap_or(0);
|
||||||
Some(re.find(&buf[start..end])
|
|
||||||
.map(|m| m.start()).unwrap_or(0) as u64)
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
};
|
|
||||||
return self.write_match(
|
return self.write_match(
|
||||||
re, path, buf, start, end, line_number, column);
|
re, path, buf, start, end, line_number, column);
|
||||||
}
|
}
|
||||||
for m in re.find_iter(&buf[start..end]) {
|
for m in re.find_iter(&buf[start..end]) {
|
||||||
let column =
|
let column = m.start();
|
||||||
if self.column {
|
|
||||||
Some(m.start() as u64)
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
};
|
|
||||||
self.write_match(
|
self.write_match(
|
||||||
re, path.as_ref(), buf, start, end, line_number, column);
|
re, path.as_ref(), buf, start, end, line_number, column);
|
||||||
}
|
}
|
||||||
@ -272,7 +262,7 @@ impl<W: WriteColor> Printer<W> {
|
|||||||
start: usize,
|
start: usize,
|
||||||
end: usize,
|
end: usize,
|
||||||
line_number: Option<u64>,
|
line_number: Option<u64>,
|
||||||
column: Option<u64>,
|
column: usize,
|
||||||
) {
|
) {
|
||||||
if self.heading && self.with_filename && !self.has_printed {
|
if self.heading && self.with_filename && !self.has_printed {
|
||||||
self.write_file_sep();
|
self.write_file_sep();
|
||||||
@ -285,8 +275,8 @@ impl<W: WriteColor> Printer<W> {
|
|||||||
if let Some(line_number) = line_number {
|
if let Some(line_number) = line_number {
|
||||||
self.line_number(line_number, b':');
|
self.line_number(line_number, b':');
|
||||||
}
|
}
|
||||||
if let Some(c) = column {
|
if self.column {
|
||||||
self.column_number(c + 1, b':');
|
self.column_number(column as u64 + 1, b':');
|
||||||
}
|
}
|
||||||
if self.replace.is_some() {
|
if self.replace.is_some() {
|
||||||
let mut count = 0;
|
let mut count = 0;
|
||||||
@ -308,8 +298,9 @@ impl<W: WriteColor> Printer<W> {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let line_buf = if self.only_matching {
|
let line_buf = if self.only_matching {
|
||||||
let m = re.find(&buf[start..end]).unwrap();
|
let start_offset = start + column;
|
||||||
&buf[start + m.start()..start + m.end()]
|
let m = re.find(&buf[start_offset..end]).unwrap();
|
||||||
|
&buf[start_offset + m.start()..start_offset + m.end()]
|
||||||
} else {
|
} else {
|
||||||
&buf[start..end]
|
&buf[start..end]
|
||||||
};
|
};
|
||||||
|
@ -1607,6 +1607,51 @@ fn regression_391() {
|
|||||||
assert_eq!(lines, "bar.py\n");
|
assert_eq!(lines, "bar.py\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// See: https://github.com/BurntSushi/ripgrep/issues/451
|
||||||
|
#[test]
|
||||||
|
fn regression_451_only_matching_as_in_issue() {
|
||||||
|
let wd = WorkDir::new("regression_451_only_matching");
|
||||||
|
let path = "digits.txt";
|
||||||
|
wd.create(path, "1 2 3\n");
|
||||||
|
|
||||||
|
let mut cmd = wd.command();
|
||||||
|
cmd.arg("[0-9]+").arg(path).arg("--only-matching");
|
||||||
|
let lines: String = wd.stdout(&mut cmd);
|
||||||
|
|
||||||
|
let expected = "\
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
";
|
||||||
|
|
||||||
|
assert_eq!(lines, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
// See: https://github.com/BurntSushi/ripgrep/issues/451
|
||||||
|
#[test]
|
||||||
|
fn regression_451_only_matching() {
|
||||||
|
let wd = WorkDir::new("regression_451_only_matching");
|
||||||
|
let path = "digits.txt";
|
||||||
|
wd.create(path, "1 2 3\n123\n");
|
||||||
|
|
||||||
|
let mut cmd = wd.command();
|
||||||
|
cmd.arg("[0-9]").arg(path)
|
||||||
|
.arg("--only-matching")
|
||||||
|
.arg("--column");
|
||||||
|
let lines: String = wd.stdout(&mut cmd);
|
||||||
|
|
||||||
|
let expected = "\
|
||||||
|
1:1:1
|
||||||
|
1:3:2
|
||||||
|
1:5:3
|
||||||
|
2:1:1
|
||||||
|
2:2:2
|
||||||
|
2:3:3
|
||||||
|
";
|
||||||
|
|
||||||
|
assert_eq!(lines, expected);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn type_list() {
|
fn type_list() {
|
||||||
let wd = WorkDir::new("type_list");
|
let wd = WorkDir::new("type_list");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user