Closed
Description
rust-analyzer version: 0.4.1493-standalone (237ffa3 2023-04-27)
rustc version: rustc 1.70.0-nightly (84dd17b56 2023-04-14)
Unfortunately I can't isolate it right now, but probably that will be easy:
- use
cargo
crate - create
config = cargo::util::config::Config::default()
- create
workspace = cargo::core::workspace::Workspace::new(&manifest_path, &*config)
- call this with
workspace.members()
, e.g.:filter_packages_with_metadata(workspace.members())
Something like this. 🙄
Code from screenshot
fn filter_packages_with_metadata<'i, I: Iterator<Item = &'i Package> + 'i>(iter: I) -> Vec<(PackageId, toml::Value)> {
filter_packages_with_metadata_iter(iter).into_iter().collect()
}
fn filter_packages_with_metadata_iter<'i, I>(iter: I) -> impl IntoIterator<Item = (PackageId, toml::Value)> + 'i
where I: Iterator<Item = &'i Package> + 'i {
iter.filter_map(|p| {
p.manifest()
.custom_metadata()
.map(|meta| {
meta.as_table()
.map(|t| t.get("my-metadata"))
.flatten()
.map(|meta| (p.package_id(), meta))
})
.flatten()
})
.filter_map(|(id, v)| toml::Value::try_from(v).ok().map(|v| (id, v)))
}