diff --git a/parser/src/ignore_block.rs b/parser/src/ignore_block.rs index 627a6e69..b6de539e 100644 --- a/parser/src/ignore_block.rs +++ b/parser/src/ignore_block.rs @@ -54,7 +54,8 @@ impl IgnoreBlocks { pub fn overlaps_ignore(&self, region: Range) -> Option> { for ignore in &self.ignore { // See https://stackoverflow.com/questions/3269434. - if ignore.start <= region.end && region.start <= ignore.end { + // We have strictly < because `end` is not included in our ranges. + if ignore.start < region.end && region.start < ignore.end { return Some(ignore.clone()); } } @@ -77,13 +78,16 @@ fn bodies(s: &str) -> Vec> { for range in &cbs.ignore { let range = range.clone(); if previous.end != range.start { + assert!(cbs.overlaps_ignore(previous.end..range.start).is_none()); bodies.push(Ignore::No(&s[previous.end..range.start])); } + assert!(cbs.overlaps_ignore(range.clone()).is_some()); bodies.push(Ignore::Yes(&s[range.clone()])); previous = range.clone(); } if let Some(range) = cbs.ignore.last() { if range.end != s.len() { + assert!(cbs.overlaps_ignore(range.end..s.len()).is_none()); bodies.push(Ignore::No(&s[range.end..])); } } @@ -282,3 +286,14 @@ This is an HTML comment. ], ); } + +#[test] +fn cbs_13() { + assert_eq!( + bodies("\n@rustbot label +F-trait_upcasting"), + [ + Ignore::Yes("\n"), + Ignore::No("@rustbot label +F-trait_upcasting") + ], + ); +}