use std::collections::HashSet;
use super::fun::FnAnalysis;
use crate::conversion::api::{Api, ApiDetail};
pub(crate) fn filter_apis_by_ignored_dependents(
mut apis: Vec<Api<FnAnalysis>>,
) -> Vec<Api<FnAnalysis>> {
let mut ignored_items: HashSet<_> = apis
.iter()
.filter_map(|api| {
if matches!(api.detail, ApiDetail::IgnoredItem) {
Some(api.typename())
} else {
None
}
})
.collect();
let mut iterate_again = true;
while iterate_again {
iterate_again = false;
apis = apis
.into_iter()
.filter(|api| {
if api.deps.iter().any(|dep| ignored_items.contains(dep)) {
iterate_again = true;
ignored_items.insert(api.typename());
eprintln!(
"Skipping item {} because it depends on another item we skipped.",
api.typename().to_string()
);
false
} else {
true
}
})
.collect();
}
apis
}