use crate::git_changes;
use crate::modulesize;
use crate::output::FileResult;
pub(super) fn apply(changeset: Option<&git_changes::Changeset>, r: &mut FileResult, _src: &[u8]) {
let Some(cs) = changeset else {
modulesize::drop_non_production(&r.path, &mut r.module_abc);
return;
};
let Some(rel) = cs.rel_of(&r.path) else {
return;
};
let rel = rel.to_string();
r.abc.retain(|o| cs.span_selected(&rel, o.line, o.end_line));
r.used_once.retain(|o| cs.line_selected(&rel, o.line));
r.never_used.retain(|o| cs.line_selected(&rel, o.line));
apply_module_abc_policy(cs, &rel, r);
}
fn apply_module_abc_policy(cs: &git_changes::Changeset, rel: &str, r: &mut FileResult) {
let refactor_scale =
changed_line_count(cs, rel) >= modulesize::MIN_REVIEW_REFACTOR_LINES;
if r.module_abc.is_some() && !refactor_scale {
r.module_abc = None;
}
}
fn changed_line_count(cs: &git_changes::Changeset, rel: &str) -> usize {
match cs.files.get(rel) {
Some(git_changes::Lines::All) => usize::MAX,
Some(git_changes::Lines::Ranges(set)) => set.len(),
None => 0,
}
}