mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-11-03 13:23:25 +00:00
43 lines
1.4 KiB
Rust
43 lines
1.4 KiB
Rust
use ide_db::{
|
|
FileId, FxIndexSet, RootDatabase,
|
|
base_db::{CrateOrigin, RootQueryDb},
|
|
};
|
|
|
|
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
|
|
pub struct CrateInfo {
|
|
pub name: Option<String>,
|
|
pub version: Option<String>,
|
|
pub root_file_id: FileId,
|
|
}
|
|
|
|
// Feature: Show Dependency Tree
|
|
//
|
|
// Shows a view tree with all the dependencies of this project
|
|
//
|
|
// | Editor | Panel Name |
|
|
// |---------|------------|
|
|
// | VS Code | **Rust Dependencies** |
|
|
//
|
|
// 
|
|
pub(crate) fn fetch_crates(db: &RootDatabase) -> FxIndexSet<CrateInfo> {
|
|
db.all_crates()
|
|
.iter()
|
|
.copied()
|
|
.map(|crate_id| (crate_id.data(db), crate_id.extra_data(db)))
|
|
.filter(|(data, _)| !matches!(data.origin, CrateOrigin::Local { .. }))
|
|
.map(|(data, extra_data)| crate_info(data, extra_data))
|
|
.collect()
|
|
}
|
|
|
|
fn crate_info(
|
|
data: &ide_db::base_db::BuiltCrateData,
|
|
extra_data: &ide_db::base_db::ExtraCrateData,
|
|
) -> CrateInfo {
|
|
let crate_name = crate_name(extra_data);
|
|
let version = extra_data.version.clone();
|
|
CrateInfo { name: crate_name, version, root_file_id: data.root_file_id }
|
|
}
|
|
|
|
fn crate_name(data: &ide_db::base_db::ExtraCrateData) -> Option<String> {
|
|
data.display_name.as_ref().map(|it| it.canonical_name().as_str().to_owned())
|
|
}
|