address review comment

https://github.com/rust-lang/rustc-dev-guide/pull/1394#discussion_r934018981

Much more clean
This commit is contained in:
Tshepang Mbambo 2022-07-31 23:26:41 +02:00
parent ade29246e2
commit 2a5b586c24
1 changed files with 54 additions and 55 deletions

View File

@ -36,22 +36,25 @@ impl fmt::Display for Date {
}
}
fn make_date_regex() -> Vec<Regex> {
Vec::from([
Regex::new(r"<!--\s+date-check:\s+(\D+)\s+(\d{4})\s+-->").unwrap(),
Regex::new(r"<!--\s+date-check\s+-->\s+(\D+)\s+(\d{4})\b").unwrap(),
])
fn make_date_regex() -> Regex {
Regex::new(
r"(?x)
(?:<!--\s+date-check:\s+(\D+)\s+(\d{4})\s+-->)|
(?:<!--\s+date-check\s+-->\s+(\D+)\s+(\d{4})\b)
",
)
.unwrap()
}
fn collect_dates_from_file(date_regexes: &[Regex], text: &str) -> Vec<(usize, Date)> {
let mut output = Vec::new();
for date_regex in date_regexes {
fn collect_dates_from_file(date_regex: &Regex, text: &str) -> Vec<(usize, Date)> {
let mut line = 1;
let mut end_of_last_cap = 0;
let results: Vec<_> = date_regex
date_regex
.captures_iter(text)
.filter_map(|cap| {
if let (Some(year), Some(month)) = (cap.get(2), cap.get(1)) {
if let (Some(month), Some(year), None, None) | (None, None, Some(month), Some(year)) =
(cap.get(1), cap.get(2), cap.get(3), cap.get(4))
{
let year = year.as_str().parse().expect("year");
let month = Month::from_str(month.as_str())
.expect("month")
@ -69,19 +72,15 @@ fn collect_dates_from_file(date_regexes: &[Regex], text: &str) -> Vec<(usize, Da
end_of_last_cap = byte_range.end;
(line, date)
})
.collect();
output.extend(results);
}
output.sort_by_key(|a| a.0);
output
.collect()
}
fn collect_dates(paths: impl Iterator<Item = PathBuf>) -> BTreeMap<PathBuf, Vec<(usize, Date)>> {
let date_regexes = make_date_regex();
let date_regex = make_date_regex();
let mut data = BTreeMap::new();
for path in paths {
let text = fs::read_to_string(&path).unwrap();
let dates = collect_dates_from_file(&date_regexes, &text);
let dates = collect_dates_from_file(&date_regex, &text);
if !dates.is_empty() {
data.insert(path, dates);
}
@ -185,29 +184,29 @@ mod tests {
#[test]
fn test_date_regex() {
let regexes = &make_date_regex();
assert!(regexes[0].is_match("<!-- date-check: jan 2021 -->"));
assert!(regexes[0].is_match("<!-- date-check: january 2021 -->"));
assert!(regexes[0].is_match("<!-- date-check: Jan 2021 -->"));
assert!(regexes[0].is_match("<!-- date-check: January 2021 -->"));
assert!(regexes[1].is_match("<!-- date-check --> jan 2021"));
assert!(regexes[1].is_match("<!-- date-check --> january 2021"));
assert!(regexes[1].is_match("<!-- date-check --> Jan 2021"));
assert!(regexes[1].is_match("<!-- date-check --> January 2021"));
let regex = &make_date_regex();
assert!(regex.is_match("<!-- date-check: jan 2021 -->"));
assert!(regex.is_match("<!-- date-check: january 2021 -->"));
assert!(regex.is_match("<!-- date-check: Jan 2021 -->"));
assert!(regex.is_match("<!-- date-check: January 2021 -->"));
assert!(regex.is_match("<!-- date-check --> jan 2021"));
assert!(regex.is_match("<!-- date-check --> january 2021"));
assert!(regex.is_match("<!-- date-check --> Jan 2021"));
assert!(regex.is_match("<!-- date-check --> January 2021"));
assert!(regexes[1].is_match("<!-- date-check --> jan 2021 "));
assert!(regexes[1].is_match("<!-- date-check --> jan 2021."));
assert!(regex.is_match("<!-- date-check --> jan 2021 "));
assert!(regex.is_match("<!-- date-check --> jan 2021."));
}
#[test]
fn test_date_regex_fail() {
let regexes = &make_date_regex();
assert!(!regexes[0].is_match("<!-- date-check: jan 221 -->"));
assert!(!regexes[0].is_match("<!-- date-check: jan 20221 -->"));
assert!(!regexes[0].is_match("<!-- date-check: 01 2021 -->"));
assert!(!regexes[1].is_match("<!-- date-check --> jan 221"));
assert!(!regexes[1].is_match("<!-- date-check --> jan 20222"));
assert!(!regexes[1].is_match("<!-- date-check --> 01 2021"));
assert!(!regexes.is_match("<!-- date-check: jan 221 -->"));
assert!(!regexes.is_match("<!-- date-check: jan 20221 -->"));
assert!(!regexes.is_match("<!-- date-check: 01 2021 -->"));
assert!(!regexes.is_match("<!-- date-check --> jan 221"));
assert!(!regexes.is_match("<!-- date-check --> jan 20222"));
assert!(!regexes.is_match("<!-- date-check --> 01 2021"));
}
#[test]