pub fn apply_sig_variants(patterns: Vec<String>) -> Vec<String> {
patterns
.into_iter()
.map(|pat| {
let (negate, inner) = if let Some(rest) = pat.strip_prefix('!') {
(true, rest)
} else {
(false, pat.as_str())
};
let sig_variant = format!("{inner}.sig");
let brace_pattern = format!("{{{inner},{sig_variant}}}");
if negate {
format!("!{brace_pattern}")
} else {
brace_pattern
}
})
.collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_apply_sig_variants() {
let patterns = vec!["foo", "!bar", "baz"]
.into_iter()
.map(String::from)
.collect();
let sig_variants = apply_sig_variants(patterns);
assert_eq!(
sig_variants,
vec!["{foo,foo.sig}", "!{bar,bar.sig}", "{baz,baz.sig}"]
);
}
}