mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-27 10:17:15 +00:00
76 lines
3.2 KiB
Rust
76 lines
3.2 KiB
Rust
use ide_db::RootDatabase;
|
|
use ide_db::base_db::{BuiltCrateData, ExtraCrateData};
|
|
use itertools::Itertools;
|
|
use span::FileId;
|
|
use stdx::format_to;
|
|
|
|
// Feature: Status
|
|
//
|
|
// Shows internal statistic about memory usage of rust-analyzer.
|
|
//
|
|
// | Editor | Action Name |
|
|
// |---------|-------------|
|
|
// | VS Code | **rust-analyzer: Status** |
|
|
//
|
|
// 
|
|
pub(crate) fn status(db: &RootDatabase, file_id: Option<FileId>) -> String {
|
|
let mut buf = String::new();
|
|
|
|
// format_to!(buf, "{}\n", collect_query(CompressedFileTextQuery.in_db(db)));
|
|
// format_to!(buf, "{}\n", collect_query(ParseQuery.in_db(db)));
|
|
// format_to!(buf, "{}\n", collect_query(ParseMacroExpansionQuery.in_db(db)));
|
|
// format_to!(buf, "{}\n", collect_query(LibrarySymbolsQuery.in_db(db)));
|
|
// format_to!(buf, "{}\n", collect_query(ModuleSymbolsQuery.in_db(db)));
|
|
// format_to!(buf, "{} in total\n", memory_usage());
|
|
|
|
// format_to!(buf, "\nDebug info:\n");
|
|
// format_to!(buf, "{}\n", collect_query(AttrsQuery.in_db(db)));
|
|
// format_to!(buf, "{} ast id maps\n", collect_query_count(AstIdMapQuery.in_db(db)));
|
|
// format_to!(buf, "{} block def maps\n", collect_query_count(BlockDefMapQuery.in_db(db)));
|
|
|
|
if let Some(file_id) = file_id {
|
|
format_to!(buf, "\nCrates for file {}:\n", file_id.index());
|
|
let crates = crate::parent_module::crates_for(db, file_id);
|
|
if crates.is_empty() {
|
|
format_to!(buf, "Does not belong to any crate");
|
|
}
|
|
for crate_id in crates {
|
|
let BuiltCrateData {
|
|
root_file_id,
|
|
edition,
|
|
dependencies,
|
|
origin,
|
|
is_proc_macro,
|
|
proc_macro_cwd,
|
|
} = crate_id.data(db);
|
|
let ExtraCrateData { version, display_name, potential_cfg_options } =
|
|
crate_id.extra_data(db);
|
|
let cfg_options = crate_id.cfg_options(db);
|
|
let env = crate_id.env(db);
|
|
format_to!(
|
|
buf,
|
|
"Crate: {}\n",
|
|
match display_name {
|
|
Some(it) => format!("{it}({crate_id:?})"),
|
|
None => format!("{crate_id:?}"),
|
|
}
|
|
);
|
|
format_to!(buf, " Root module file id: {}\n", root_file_id.index());
|
|
format_to!(buf, " Edition: {}\n", edition);
|
|
format_to!(buf, " Version: {}\n", version.as_deref().unwrap_or("n/a"));
|
|
format_to!(buf, " Enabled cfgs: {:?}\n", cfg_options);
|
|
format_to!(buf, " Potential cfgs: {:?}\n", potential_cfg_options);
|
|
format_to!(buf, " Env: {:?}\n", env);
|
|
format_to!(buf, " Origin: {:?}\n", origin);
|
|
format_to!(buf, " Is a proc macro crate: {}\n", is_proc_macro);
|
|
format_to!(buf, " Proc macro cwd: {:?}\n", proc_macro_cwd);
|
|
let deps = dependencies
|
|
.iter()
|
|
.map(|dep| format!("{}={:?}", dep.name, dep.crate_id))
|
|
.format(", ");
|
|
format_to!(buf, " Dependencies: {}\n", deps);
|
|
}
|
|
}
|
|
|
|
buf.trim().to_owned()
|
|
}
|