mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-29 06:23:25 +00:00
Auto merge of #14302 - Veykril:db-memory-usage, r=Veykril
internal: Add missing queries to per_query_memory_usage
This commit is contained in:
commit
8ce5a53934
5 changed files with 59 additions and 68 deletions
|
@ -271,7 +271,6 @@ pub struct Body {
|
||||||
pub exprs: Arena<Expr>,
|
pub exprs: Arena<Expr>,
|
||||||
pub pats: Arena<Pat>,
|
pub pats: Arena<Pat>,
|
||||||
pub bindings: Arena<Binding>,
|
pub bindings: Arena<Binding>,
|
||||||
pub or_pats: FxHashMap<PatId, Arc<[PatId]>>,
|
|
||||||
pub labels: Arena<Label>,
|
pub labels: Arena<Label>,
|
||||||
/// The patterns for the function's parameters. While the parameter types are
|
/// The patterns for the function's parameters. While the parameter types are
|
||||||
/// part of the function signature, the patterns are not (they don't change
|
/// part of the function signature, the patterns are not (they don't change
|
||||||
|
@ -410,18 +409,6 @@ impl Body {
|
||||||
.map(move |&block| (block, db.block_def_map(block).expect("block ID without DefMap")))
|
.map(move |&block| (block, db.block_def_map(block).expect("block ID without DefMap")))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn pattern_representative(&self, pat: PatId) -> PatId {
|
|
||||||
self.or_pats.get(&pat).and_then(|pats| pats.first().copied()).unwrap_or(pat)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Retrieves all ident patterns this pattern shares the ident with.
|
|
||||||
pub fn ident_patterns_for<'slf>(&'slf self, pat: &'slf PatId) -> &'slf [PatId] {
|
|
||||||
match self.or_pats.get(pat) {
|
|
||||||
Some(pats) => pats,
|
|
||||||
None => std::slice::from_ref(pat),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn pretty_print(&self, db: &dyn DefDatabase, owner: DefWithBodyId) -> String {
|
pub fn pretty_print(&self, db: &dyn DefDatabase, owner: DefWithBodyId) -> String {
|
||||||
pretty::print_body_hir(db, self, owner)
|
pretty::print_body_hir(db, self, owner)
|
||||||
}
|
}
|
||||||
|
@ -436,19 +423,9 @@ impl Body {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn shrink_to_fit(&mut self) {
|
fn shrink_to_fit(&mut self) {
|
||||||
let Self {
|
let Self { _c: _, body_expr: _, block_scopes, exprs, labels, params, pats, bindings } =
|
||||||
_c: _,
|
self;
|
||||||
body_expr: _,
|
|
||||||
block_scopes,
|
|
||||||
or_pats,
|
|
||||||
exprs,
|
|
||||||
labels,
|
|
||||||
params,
|
|
||||||
pats,
|
|
||||||
bindings,
|
|
||||||
} = self;
|
|
||||||
block_scopes.shrink_to_fit();
|
block_scopes.shrink_to_fit();
|
||||||
or_pats.shrink_to_fit();
|
|
||||||
exprs.shrink_to_fit();
|
exprs.shrink_to_fit();
|
||||||
labels.shrink_to_fit();
|
labels.shrink_to_fit();
|
||||||
params.shrink_to_fit();
|
params.shrink_to_fit();
|
||||||
|
@ -464,7 +441,6 @@ impl Default for Body {
|
||||||
exprs: Default::default(),
|
exprs: Default::default(),
|
||||||
pats: Default::default(),
|
pats: Default::default(),
|
||||||
bindings: Default::default(),
|
bindings: Default::default(),
|
||||||
or_pats: Default::default(),
|
|
||||||
labels: Default::default(),
|
labels: Default::default(),
|
||||||
params: Default::default(),
|
params: Default::default(),
|
||||||
block_scopes: Default::default(),
|
block_scopes: Default::default(),
|
||||||
|
|
|
@ -94,11 +94,8 @@ pub(super) fn lower(
|
||||||
body_expr: dummy_expr_id(),
|
body_expr: dummy_expr_id(),
|
||||||
block_scopes: Vec::new(),
|
block_scopes: Vec::new(),
|
||||||
_c: Count::new(),
|
_c: Count::new(),
|
||||||
or_pats: Default::default(),
|
|
||||||
},
|
},
|
||||||
expander,
|
expander,
|
||||||
name_to_pat_grouping: Default::default(),
|
|
||||||
is_lowering_inside_or_pat: false,
|
|
||||||
is_lowering_assignee_expr: false,
|
is_lowering_assignee_expr: false,
|
||||||
is_lowering_generator: false,
|
is_lowering_generator: false,
|
||||||
}
|
}
|
||||||
|
@ -111,9 +108,6 @@ struct ExprCollector<'a> {
|
||||||
ast_id_map: Arc<AstIdMap>,
|
ast_id_map: Arc<AstIdMap>,
|
||||||
body: Body,
|
body: Body,
|
||||||
source_map: BodySourceMap,
|
source_map: BodySourceMap,
|
||||||
// a poor-mans union-find?
|
|
||||||
name_to_pat_grouping: FxHashMap<Name, Vec<PatId>>,
|
|
||||||
is_lowering_inside_or_pat: bool,
|
|
||||||
is_lowering_assignee_expr: bool,
|
is_lowering_assignee_expr: bool,
|
||||||
is_lowering_generator: bool,
|
is_lowering_generator: bool,
|
||||||
}
|
}
|
||||||
|
@ -824,13 +818,7 @@ impl ExprCollector<'_> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn collect_pat(&mut self, pat: ast::Pat) -> PatId {
|
fn collect_pat(&mut self, pat: ast::Pat) -> PatId {
|
||||||
let pat_id = self.collect_pat_(pat, &mut BindingList::default());
|
self.collect_pat_(pat, &mut BindingList::default())
|
||||||
for (_, pats) in self.name_to_pat_grouping.drain() {
|
|
||||||
let pats = Arc::<[_]>::from(pats);
|
|
||||||
self.body.or_pats.extend(pats.iter().map(|&pat| (pat, pats.clone())));
|
|
||||||
}
|
|
||||||
self.is_lowering_inside_or_pat = false;
|
|
||||||
pat_id
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn collect_pat_opt(&mut self, pat: Option<ast::Pat>) -> PatId {
|
fn collect_pat_opt(&mut self, pat: Option<ast::Pat>) -> PatId {
|
||||||
|
@ -845,13 +833,13 @@ impl ExprCollector<'_> {
|
||||||
ast::Pat::IdentPat(bp) => {
|
ast::Pat::IdentPat(bp) => {
|
||||||
let name = bp.name().map(|nr| nr.as_name()).unwrap_or_else(Name::missing);
|
let name = bp.name().map(|nr| nr.as_name()).unwrap_or_else(Name::missing);
|
||||||
|
|
||||||
let key = self.is_lowering_inside_or_pat.then(|| name.clone());
|
|
||||||
let annotation =
|
let annotation =
|
||||||
BindingAnnotation::new(bp.mut_token().is_some(), bp.ref_token().is_some());
|
BindingAnnotation::new(bp.mut_token().is_some(), bp.ref_token().is_some());
|
||||||
let subpat = bp.pat().map(|subpat| self.collect_pat_(subpat, binding_list));
|
let subpat = bp.pat().map(|subpat| self.collect_pat_(subpat, binding_list));
|
||||||
let (binding, pattern) = if annotation == BindingAnnotation::Unannotated
|
|
||||||
&& subpat.is_none()
|
let is_simple_ident_pat =
|
||||||
{
|
annotation == BindingAnnotation::Unannotated && subpat.is_none();
|
||||||
|
let (binding, pattern) = if is_simple_ident_pat {
|
||||||
// This could also be a single-segment path pattern. To
|
// This could also be a single-segment path pattern. To
|
||||||
// decide that, we need to try resolving the name.
|
// decide that, we need to try resolving the name.
|
||||||
let (resolved, _) = self.expander.def_map.resolve_path(
|
let (resolved, _) = self.expander.def_map.resolve_path(
|
||||||
|
@ -892,9 +880,6 @@ impl ExprCollector<'_> {
|
||||||
if let Some(binding_id) = binding {
|
if let Some(binding_id) = binding {
|
||||||
self.add_definition_to_binding(binding_id, pat);
|
self.add_definition_to_binding(binding_id, pat);
|
||||||
}
|
}
|
||||||
if let Some(key) = key {
|
|
||||||
self.name_to_pat_grouping.entry(key).or_default().push(pat);
|
|
||||||
}
|
|
||||||
return pat;
|
return pat;
|
||||||
}
|
}
|
||||||
ast::Pat::TupleStructPat(p) => {
|
ast::Pat::TupleStructPat(p) => {
|
||||||
|
@ -914,7 +899,6 @@ impl ExprCollector<'_> {
|
||||||
path.map(Pat::Path).unwrap_or(Pat::Missing)
|
path.map(Pat::Path).unwrap_or(Pat::Missing)
|
||||||
}
|
}
|
||||||
ast::Pat::OrPat(p) => {
|
ast::Pat::OrPat(p) => {
|
||||||
self.is_lowering_inside_or_pat = true;
|
|
||||||
let pats = p.pats().map(|p| self.collect_pat_(p, binding_list)).collect();
|
let pats = p.pats().map(|p| self.collect_pat_(p, binding_list)).collect();
|
||||||
Pat::Or(pats)
|
Pat::Or(pats)
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,9 @@
|
||||||
//! But we need this for at least LRU caching at the query level.
|
//! But we need this for at least LRU caching at the query level.
|
||||||
pub use hir_def::db::*;
|
pub use hir_def::db::*;
|
||||||
pub use hir_expand::db::{
|
pub use hir_expand::db::{
|
||||||
AstDatabase, AstDatabaseStorage, AstIdMapQuery, HygieneFrameQuery, InternMacroCallQuery,
|
AstDatabase, AstDatabaseStorage, AstIdMapQuery, ExpandProcMacroQuery, HygieneFrameQuery,
|
||||||
MacroArgTextQuery, MacroDefQuery, MacroExpandQuery, ParseMacroExpansionQuery,
|
InternMacroCallQuery, MacroArgTextQuery, MacroDefQuery, MacroExpandErrorQuery,
|
||||||
|
MacroExpandQuery, ParseMacroExpansionQuery,
|
||||||
};
|
};
|
||||||
pub use hir_ty::db::*;
|
pub use hir_ty::db::*;
|
||||||
|
|
||||||
|
|
|
@ -2501,10 +2501,6 @@ impl GenericDef {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A single local definition.
|
/// A single local definition.
|
||||||
///
|
|
||||||
/// If the definition of this is part of a "MultiLocal", that is a local that has multiple declarations due to or-patterns
|
|
||||||
/// then this only references a single one of those.
|
|
||||||
/// To retrieve the other locals you should use [`Local::associated_locals`]
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||||
pub struct Local {
|
pub struct Local {
|
||||||
pub(crate) parent: DefWithBodyId,
|
pub(crate) parent: DefWithBodyId,
|
||||||
|
|
|
@ -73,68 +73,96 @@ impl RootDatabase {
|
||||||
|
|
||||||
// AstDatabase
|
// AstDatabase
|
||||||
hir::db::AstIdMapQuery
|
hir::db::AstIdMapQuery
|
||||||
|
hir::db::ParseMacroExpansionQuery
|
||||||
|
hir::db::InternMacroCallQuery
|
||||||
hir::db::MacroArgTextQuery
|
hir::db::MacroArgTextQuery
|
||||||
hir::db::MacroDefQuery
|
hir::db::MacroDefQuery
|
||||||
hir::db::ParseMacroExpansionQuery
|
|
||||||
hir::db::MacroExpandQuery
|
hir::db::MacroExpandQuery
|
||||||
|
hir::db::ExpandProcMacroQuery
|
||||||
|
hir::db::MacroExpandErrorQuery
|
||||||
hir::db::HygieneFrameQuery
|
hir::db::HygieneFrameQuery
|
||||||
hir::db::InternMacroCallQuery
|
|
||||||
|
|
||||||
// DefDatabase
|
// DefDatabase
|
||||||
hir::db::FileItemTreeQuery
|
hir::db::FileItemTreeQuery
|
||||||
hir::db::BlockDefMapQuery
|
|
||||||
hir::db::CrateDefMapQueryQuery
|
hir::db::CrateDefMapQueryQuery
|
||||||
hir::db::FieldsAttrsQuery
|
hir::db::BlockDefMapQuery
|
||||||
hir::db::VariantsAttrsQuery
|
|
||||||
hir::db::FieldsAttrsSourceMapQuery
|
|
||||||
hir::db::VariantsAttrsSourceMapQuery
|
|
||||||
hir::db::StructDataQuery
|
hir::db::StructDataQuery
|
||||||
|
hir::db::StructDataWithDiagnosticsQuery
|
||||||
hir::db::UnionDataQuery
|
hir::db::UnionDataQuery
|
||||||
|
hir::db::UnionDataWithDiagnosticsQuery
|
||||||
hir::db::EnumDataQuery
|
hir::db::EnumDataQuery
|
||||||
|
hir::db::EnumDataWithDiagnosticsQuery
|
||||||
hir::db::ImplDataQuery
|
hir::db::ImplDataQuery
|
||||||
|
hir::db::ImplDataWithDiagnosticsQuery
|
||||||
hir::db::TraitDataQuery
|
hir::db::TraitDataQuery
|
||||||
|
hir::db::TraitDataWithDiagnosticsQuery
|
||||||
|
hir::db::TraitAliasDataQuery
|
||||||
hir::db::TypeAliasDataQuery
|
hir::db::TypeAliasDataQuery
|
||||||
hir::db::FunctionDataQuery
|
hir::db::FunctionDataQuery
|
||||||
hir::db::ConstDataQuery
|
hir::db::ConstDataQuery
|
||||||
hir::db::StaticDataQuery
|
hir::db::StaticDataQuery
|
||||||
|
hir::db::Macro2DataQuery
|
||||||
|
hir::db::MacroRulesDataQuery
|
||||||
|
hir::db::ProcMacroDataQuery
|
||||||
hir::db::BodyWithSourceMapQuery
|
hir::db::BodyWithSourceMapQuery
|
||||||
hir::db::BodyQuery
|
hir::db::BodyQuery
|
||||||
hir::db::ExprScopesQuery
|
hir::db::ExprScopesQuery
|
||||||
hir::db::GenericParamsQuery
|
hir::db::GenericParamsQuery
|
||||||
|
hir::db::VariantsAttrsQuery
|
||||||
|
hir::db::FieldsAttrsQuery
|
||||||
|
hir::db::VariantsAttrsSourceMapQuery
|
||||||
|
hir::db::FieldsAttrsSourceMapQuery
|
||||||
hir::db::AttrsQuery
|
hir::db::AttrsQuery
|
||||||
hir::db::CrateLangItemsQuery
|
hir::db::CrateLangItemsQuery
|
||||||
hir::db::LangItemQuery
|
hir::db::LangItemQuery
|
||||||
hir::db::ImportMapQuery
|
hir::db::ImportMapQuery
|
||||||
|
hir::db::FieldVisibilitiesQuery
|
||||||
|
hir::db::FunctionVisibilityQuery
|
||||||
|
hir::db::ConstVisibilityQuery
|
||||||
|
hir::db::CrateSupportsNoStdQuery
|
||||||
|
|
||||||
// HirDatabase
|
// HirDatabase
|
||||||
hir::db::InferQueryQuery
|
hir::db::InferQueryQuery
|
||||||
|
hir::db::MirBodyQuery
|
||||||
|
hir::db::BorrowckQuery
|
||||||
hir::db::TyQuery
|
hir::db::TyQuery
|
||||||
hir::db::ValueTyQuery
|
hir::db::ValueTyQuery
|
||||||
hir::db::ImplSelfTyQuery
|
hir::db::ImplSelfTyQuery
|
||||||
|
hir::db::ConstParamTyQuery
|
||||||
|
hir::db::ConstEvalQuery
|
||||||
|
hir::db::ConstEvalDiscriminantQuery
|
||||||
hir::db::ImplTraitQuery
|
hir::db::ImplTraitQuery
|
||||||
hir::db::FieldTypesQuery
|
hir::db::FieldTypesQuery
|
||||||
|
hir::db::LayoutOfAdtQuery
|
||||||
|
hir::db::TargetDataLayoutQuery
|
||||||
hir::db::CallableItemSignatureQuery
|
hir::db::CallableItemSignatureQuery
|
||||||
|
hir::db::ReturnTypeImplTraitsQuery
|
||||||
hir::db::GenericPredicatesForParamQuery
|
hir::db::GenericPredicatesForParamQuery
|
||||||
hir::db::GenericPredicatesQuery
|
hir::db::GenericPredicatesQuery
|
||||||
|
hir::db::TraitEnvironmentQuery
|
||||||
hir::db::GenericDefaultsQuery
|
hir::db::GenericDefaultsQuery
|
||||||
hir::db::InherentImplsInCrateQuery
|
hir::db::InherentImplsInCrateQuery
|
||||||
hir::db::TraitEnvironmentQuery
|
hir::db::InherentImplsInBlockQuery
|
||||||
|
hir::db::IncoherentInherentImplCratesQuery
|
||||||
hir::db::TraitImplsInCrateQuery
|
hir::db::TraitImplsInCrateQuery
|
||||||
|
hir::db::TraitImplsInBlockQuery
|
||||||
hir::db::TraitImplsInDepsQuery
|
hir::db::TraitImplsInDepsQuery
|
||||||
hir::db::AssociatedTyDataQuery
|
hir::db::InternCallableDefQuery
|
||||||
|
hir::db::InternLifetimeParamIdQuery
|
||||||
|
hir::db::InternImplTraitIdQuery
|
||||||
|
hir::db::InternTypeOrConstParamIdQuery
|
||||||
|
hir::db::InternClosureQuery
|
||||||
|
hir::db::InternGeneratorQuery
|
||||||
hir::db::AssociatedTyDataQuery
|
hir::db::AssociatedTyDataQuery
|
||||||
hir::db::TraitDatumQuery
|
hir::db::TraitDatumQuery
|
||||||
hir::db::StructDatumQuery
|
hir::db::StructDatumQuery
|
||||||
hir::db::ImplDatumQuery
|
hir::db::ImplDatumQuery
|
||||||
hir::db::FnDefDatumQuery
|
hir::db::FnDefDatumQuery
|
||||||
hir::db::ReturnTypeImplTraitsQuery
|
hir::db::FnDefVarianceQuery
|
||||||
hir::db::InternCallableDefQuery
|
hir::db::AdtVarianceQuery
|
||||||
hir::db::InternTypeOrConstParamIdQuery
|
|
||||||
hir::db::InternImplTraitIdQuery
|
|
||||||
hir::db::InternClosureQuery
|
|
||||||
hir::db::AssociatedTyValueQuery
|
hir::db::AssociatedTyValueQuery
|
||||||
hir::db::TraitSolveQueryQuery
|
hir::db::TraitSolveQueryQuery
|
||||||
hir::db::InternTypeOrConstParamIdQuery
|
hir::db::ProgramClausesForChalkEnvQuery
|
||||||
|
|
||||||
// SymbolsDatabase
|
// SymbolsDatabase
|
||||||
crate::symbol_index::ModuleSymbolsQuery
|
crate::symbol_index::ModuleSymbolsQuery
|
||||||
|
@ -153,8 +181,14 @@ impl RootDatabase {
|
||||||
hir::db::InternConstQuery
|
hir::db::InternConstQuery
|
||||||
hir::db::InternStaticQuery
|
hir::db::InternStaticQuery
|
||||||
hir::db::InternTraitQuery
|
hir::db::InternTraitQuery
|
||||||
|
hir::db::InternTraitAliasQuery
|
||||||
hir::db::InternTypeAliasQuery
|
hir::db::InternTypeAliasQuery
|
||||||
hir::db::InternImplQuery
|
hir::db::InternImplQuery
|
||||||
|
hir::db::InternExternBlockQuery
|
||||||
|
hir::db::InternBlockQuery
|
||||||
|
hir::db::InternMacro2Query
|
||||||
|
hir::db::InternProcMacroQuery
|
||||||
|
hir::db::InternMacroRulesQuery
|
||||||
];
|
];
|
||||||
|
|
||||||
acc.sort_by_key(|it| std::cmp::Reverse(it.1));
|
acc.sort_by_key(|it| std::cmp::Reverse(it.1));
|
||||||
|
|
Loading…
Reference in a new issue