mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
Add some profiling calls to name resolution
This commit is contained in:
parent
0646d5cf9e
commit
033f87c2f0
1 changed files with 22 additions and 4 deletions
|
@ -275,6 +275,8 @@ struct DefCollector<'a> {
|
||||||
|
|
||||||
impl DefCollector<'_> {
|
impl DefCollector<'_> {
|
||||||
fn seed_with_top_level(&mut self) {
|
fn seed_with_top_level(&mut self) {
|
||||||
|
let _p = profile::span("seed_with_top_level");
|
||||||
|
|
||||||
let file_id = self.db.crate_graph()[self.def_map.krate].root_file_id;
|
let file_id = self.db.crate_graph()[self.def_map.krate].root_file_id;
|
||||||
let item_tree = self.db.file_item_tree(file_id.into());
|
let item_tree = self.db.file_item_tree(file_id.into());
|
||||||
let module_id = self.def_map.root;
|
let module_id = self.def_map.root;
|
||||||
|
@ -346,17 +348,22 @@ impl DefCollector<'_> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn collect(&mut self) {
|
fn resolution_loop(&mut self) {
|
||||||
|
let _p = profile::span("DefCollector::resolution_loop");
|
||||||
|
|
||||||
// main name resolution fixed-point loop.
|
// main name resolution fixed-point loop.
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
'outer: loop {
|
'outer: loop {
|
||||||
loop {
|
loop {
|
||||||
self.db.unwind_if_cancelled();
|
self.db.unwind_if_cancelled();
|
||||||
|
{
|
||||||
|
let _p = profile::span("resolve_imports loop");
|
||||||
loop {
|
loop {
|
||||||
if self.resolve_imports() == ReachedFixedPoint::Yes {
|
if self.resolve_imports() == ReachedFixedPoint::Yes {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if self.resolve_macros() == ReachedFixedPoint::Yes {
|
if self.resolve_macros() == ReachedFixedPoint::Yes {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -372,6 +379,12 @@ impl DefCollector<'_> {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn collect(&mut self) {
|
||||||
|
let _p = profile::span("DefCollector::collect");
|
||||||
|
|
||||||
|
self.resolution_loop();
|
||||||
|
|
||||||
// Resolve all indeterminate resolved imports again
|
// Resolve all indeterminate resolved imports again
|
||||||
// As some of the macros will expand newly import shadowing partial resolved imports
|
// As some of the macros will expand newly import shadowing partial resolved imports
|
||||||
|
@ -723,6 +736,7 @@ impl DefCollector<'_> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn resolve_import(&self, module_id: LocalModuleId, import: &Import) -> PartialResolvedImport {
|
fn resolve_import(&self, module_id: LocalModuleId, import: &Import) -> PartialResolvedImport {
|
||||||
|
let _p = profile::span("resolve_import").detail(|| format!("{}", import.path));
|
||||||
tracing::debug!("resolving import: {:?} ({:?})", import, self.def_map.edition);
|
tracing::debug!("resolving import: {:?} ({:?})", import, self.def_map.edition);
|
||||||
if import.is_extern_crate {
|
if import.is_extern_crate {
|
||||||
let name = import
|
let name = import
|
||||||
|
@ -790,6 +804,8 @@ impl DefCollector<'_> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn record_resolved_import(&mut self, directive: &ImportDirective) {
|
fn record_resolved_import(&mut self, directive: &ImportDirective) {
|
||||||
|
let _p = profile::span("record_resolved_import");
|
||||||
|
|
||||||
let module_id = directive.module_id;
|
let module_id = directive.module_id;
|
||||||
let import = &directive.import;
|
let import = &directive.import;
|
||||||
let mut def = directive.status.namespaces();
|
let mut def = directive.status.namespaces();
|
||||||
|
@ -1244,6 +1260,8 @@ impl DefCollector<'_> {
|
||||||
fn finish(mut self) -> DefMap {
|
fn finish(mut self) -> DefMap {
|
||||||
// Emit diagnostics for all remaining unexpanded macros.
|
// Emit diagnostics for all remaining unexpanded macros.
|
||||||
|
|
||||||
|
let _p = profile::span("DefCollector::finish");
|
||||||
|
|
||||||
for directive in &self.unresolved_macros {
|
for directive in &self.unresolved_macros {
|
||||||
match &directive.kind {
|
match &directive.kind {
|
||||||
MacroDirectiveKind::FnLike { ast_id, expand_to } => {
|
MacroDirectiveKind::FnLike { ast_id, expand_to } => {
|
||||||
|
|
Loading…
Reference in a new issue