diff --git a/CHANGELOG.md b/CHANGELOG.md index cb26627c..b0438110 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +TBD +=== +Bug fixes: + +* [BUG #1537](https://github.com/BurntSushi/ripgrep/issues/1537): + Fix match bug caused by inner literal optimization. + + 12.0.1 (2020-03-29) =================== ripgrep 12.0.1 is a small patch release that includes a minor bug fix relating diff --git a/crates/regex/src/literal.rs b/crates/regex/src/literal.rs index f1184fa1..a18dcb17 100644 --- a/crates/regex/src/literal.rs +++ b/crates/regex/src/literal.rs @@ -326,12 +326,12 @@ fn is_simple(expr: &Hir) -> bool { HirKind::Empty | HirKind::Literal(_) | HirKind::Class(_) - | HirKind::Repetition(_) | HirKind::Concat(_) | HirKind::Alternation(_) => true, - HirKind::Anchor(_) | HirKind::WordBoundary(_) | HirKind::Group(_) => { - false - } + HirKind::Anchor(_) + | HirKind::WordBoundary(_) + | HirKind::Group(_) + | HirKind::Repetition(_) => false, } } @@ -412,8 +412,17 @@ mod tests { // https://github.com/BurntSushi/ripgrep/issues/1319 assert_eq!( one_regex(r"TTGAGTCCAGGAG[ATCG]{2}C"), - pat("TTGAGTCCAGGAGA|TTGAGTCCAGGAGC|\ - TTGAGTCCAGGAGG|TTGAGTCCAGGAGT") + pat("TTGAGTCCAGGAG"), ); } + + #[test] + fn regression_1537() { + // Regression from: + // https://github.com/BurntSushi/ripgrep/issues/1537 + assert_eq!(one_regex(r";(.*,)"), pat(";")); + assert_eq!(one_regex(r";((.*,))"), pat(";")); + assert_eq!(one_regex(r";(.*,)+"), pat(";"),); + assert_eq!(one_regex(r";(.*,){1}"), pat(";"),); + } } diff --git a/tests/regression.rs b/tests/regression.rs index 89297b9c..6cdf8b99 100644 --- a/tests/regression.rs +++ b/tests/regression.rs @@ -791,3 +791,11 @@ rgtest!( eqnice!("repotree/not-ignored\n", cmd.stdout()); } ); + +// See: https://github.com/BurntSushi/ripgrep/issues/1537 +rgtest!(r1537, |dir: Dir, mut cmd: TestCommand| { + dir.create("foo", "abc;de,fg"); + + let expected = "foo:abc;de,fg\n"; + eqnice!(expected, cmd.arg(";(.*,){1}").stdout()); +});