Skip to content

Commit 3e47532

Browse files
committed
Auto merge of #16474 - davidbarsky:david/import-on-the-fly-improvements, r=lnicola
internal: even more `tracing` As part of profiling completions, I added some additional spans and moved `TyBuilder::subst_for_def` closer to its usage site (the latter had a small impact on completion performance. Thanks for the tip, Lukas!)
2 parents 081cf02 + f9bef39 commit 3e47532

File tree

9 files changed

+50
-4
lines changed

9 files changed

+50
-4
lines changed

crates/hir-def/src/find_path.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ fn find_path_inner(ctx: FindPathCtx<'_>, item: ItemInNs, from: ModuleId) -> Opti
171171
.map(|(item, _)| item)
172172
}
173173

174+
#[tracing::instrument(skip_all)]
174175
fn find_path_for_module(
175176
ctx: FindPathCtx<'_>,
176177
def_map: &DefMap,
@@ -312,6 +313,7 @@ fn find_self_super(def_map: &DefMap, item: ModuleId, from: ModuleId) -> Option<M
312313
}
313314
}
314315

316+
#[tracing::instrument(skip_all)]
315317
fn calculate_best_path(
316318
ctx: FindPathCtx<'_>,
317319
def_map: &DefMap,

crates/hir-def/src/visibility.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ pub enum Visibility {
9494
}
9595

9696
impl Visibility {
97+
#[tracing::instrument(skip_all)]
9798
pub fn is_visible_from(self, db: &dyn DefDatabase, from_module: ModuleId) -> bool {
9899
let to_module = match self {
99100
Visibility::Module(m, _) => m,

crates/hir-ty/src/autoderef.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ impl<'a, 'db> Autoderef<'a, 'db> {
8888
impl Iterator for Autoderef<'_, '_> {
8989
type Item = (Ty, usize);
9090

91+
#[tracing::instrument(skip_all)]
9192
fn next(&mut self) -> Option<Self::Item> {
9293
if self.at_start {
9394
self.at_start = false;

crates/hir-ty/src/builder.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ impl<D> TyBuilder<D> {
125125
this
126126
}
127127

128+
#[tracing::instrument(skip_all)]
128129
pub(crate) fn fill_with_inference_vars(self, table: &mut InferenceTable<'_>) -> Self {
129130
self.fill(|x| match x {
130131
ParamKind::Type => table.new_type_var().cast(Interner),
@@ -208,6 +209,7 @@ impl TyBuilder<()> {
208209
)
209210
}
210211

212+
#[tracing::instrument(skip_all)]
211213
pub fn subst_for_def(
212214
db: &dyn HirDatabase,
213215
def: impl Into<GenericDefId>,

crates/hir-ty/src/infer/unify.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,12 +469,14 @@ impl<'a> InferenceTable<'a> {
469469
}
470470
}
471471

472+
#[tracing::instrument(skip_all)]
472473
pub(crate) fn rollback_to(&mut self, snapshot: InferenceTableSnapshot) {
473474
self.var_unification_table.rollback_to(snapshot.var_table_snapshot);
474475
self.type_variable_table = snapshot.type_variable_table_snapshot;
475476
self.pending_obligations = snapshot.pending_obligations;
476477
}
477478

479+
#[tracing::instrument(skip_all)]
478480
pub(crate) fn run_in_snapshot<T>(&mut self, f: impl FnOnce(&mut InferenceTable<'_>) -> T) -> T {
479481
let snapshot = self.snapshot();
480482
let result = f(self);

crates/hir-ty/src/method_resolution.rs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -931,6 +931,15 @@ pub fn iterate_method_candidates_dyn(
931931
mode: LookupMode,
932932
callback: &mut dyn FnMut(ReceiverAdjustments, AssocItemId, bool) -> ControlFlow<()>,
933933
) -> ControlFlow<()> {
934+
let _p = tracing::span!(
935+
tracing::Level::INFO,
936+
"iterate_method_candidates_dyn",
937+
?mode,
938+
?name,
939+
traits_in_scope_len = traits_in_scope.len()
940+
)
941+
.entered();
942+
934943
match mode {
935944
LookupMode::MethodCall => {
936945
// For method calls, rust first does any number of autoderef, and
@@ -984,6 +993,7 @@ pub fn iterate_method_candidates_dyn(
984993
}
985994
}
986995

996+
#[tracing::instrument(skip_all, fields(name = ?name))]
987997
fn iterate_method_candidates_with_autoref(
988998
receiver_ty: &Canonical<Ty>,
989999
first_adjustment: ReceiverAdjustments,
@@ -1041,6 +1051,7 @@ fn iterate_method_candidates_with_autoref(
10411051
)
10421052
}
10431053

1054+
#[tracing::instrument(skip_all, fields(name = ?name))]
10441055
fn iterate_method_candidates_by_receiver(
10451056
receiver_ty: &Canonical<Ty>,
10461057
receiver_adjustments: ReceiverAdjustments,
@@ -1088,6 +1099,7 @@ fn iterate_method_candidates_by_receiver(
10881099
ControlFlow::Continue(())
10891100
}
10901101

1102+
#[tracing::instrument(skip_all, fields(name = ?name))]
10911103
fn iterate_method_candidates_for_self_ty(
10921104
self_ty: &Canonical<Ty>,
10931105
db: &dyn HirDatabase,
@@ -1119,6 +1131,7 @@ fn iterate_method_candidates_for_self_ty(
11191131
)
11201132
}
11211133

1134+
#[tracing::instrument(skip_all, fields(name = ?name, visible_from_module, receiver_ty))]
11221135
fn iterate_trait_method_candidates(
11231136
self_ty: &Ty,
11241137
table: &mut InferenceTable<'_>,
@@ -1175,6 +1188,7 @@ fn iterate_trait_method_candidates(
11751188
ControlFlow::Continue(())
11761189
}
11771190

1191+
#[tracing::instrument(skip_all, fields(name = ?name, visible_from_module, receiver_ty))]
11781192
fn iterate_inherent_methods(
11791193
self_ty: &Ty,
11801194
table: &mut InferenceTable<'_>,
@@ -1267,6 +1281,7 @@ fn iterate_inherent_methods(
12671281
}
12681282
return ControlFlow::Continue(());
12691283

1284+
#[tracing::instrument(skip_all, fields(name = ?name, visible_from_module, receiver_ty))]
12701285
fn iterate_inherent_trait_methods(
12711286
self_ty: &Ty,
12721287
table: &mut InferenceTable<'_>,
@@ -1293,6 +1308,7 @@ fn iterate_inherent_methods(
12931308
ControlFlow::Continue(())
12941309
}
12951310

1311+
#[tracing::instrument(skip_all, fields(name = ?name, visible_from_module, receiver_ty))]
12961312
fn impls_for_self_ty(
12971313
impls: &InherentImpls,
12981314
self_ty: &Ty,
@@ -1356,6 +1372,7 @@ macro_rules! check_that {
13561372
};
13571373
}
13581374

1375+
#[tracing::instrument(skip_all, fields(name))]
13591376
fn is_valid_candidate(
13601377
table: &mut InferenceTable<'_>,
13611378
name: Option<&Name>,
@@ -1403,6 +1420,7 @@ enum IsValidCandidate {
14031420
NotVisible,
14041421
}
14051422

1423+
#[tracing::instrument(skip_all, fields(name))]
14061424
fn is_valid_fn_candidate(
14071425
table: &mut InferenceTable<'_>,
14081426
fn_id: FunctionId,
@@ -1439,15 +1457,15 @@ fn is_valid_fn_candidate(
14391457
_ => unreachable!(),
14401458
};
14411459

1442-
let fn_subst = TyBuilder::subst_for_def(db, fn_id, Some(impl_subst.clone()))
1443-
.fill_with_inference_vars(table)
1444-
.build();
1445-
14461460
check_that!(table.unify(&expect_self_ty, self_ty));
14471461

14481462
if let Some(receiver_ty) = receiver_ty {
14491463
check_that!(data.has_self_param());
14501464

1465+
let fn_subst = TyBuilder::subst_for_def(db, fn_id, Some(impl_subst.clone()))
1466+
.fill_with_inference_vars(table)
1467+
.build();
1468+
14511469
let sig = db.callable_item_signature(fn_id.into());
14521470
let expected_receiver =
14531471
sig.map(|s| s.params()[0].clone()).substitute(Interner, &fn_subst);
@@ -1540,6 +1558,7 @@ pub fn implements_trait_unique(
15401558

15411559
/// This creates Substs for a trait with the given Self type and type variables
15421560
/// for all other parameters, to query Chalk with it.
1561+
#[tracing::instrument(skip_all)]
15431562
fn generic_implements_goal(
15441563
db: &dyn HirDatabase,
15451564
env: Arc<TraitEnvironment>,

crates/hir/src/lib.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4101,6 +4101,14 @@ impl Type {
41014101
name: Option<&Name>,
41024102
callback: &mut dyn FnMut(AssocItemId) -> ControlFlow<()>,
41034103
) {
4104+
let _p = tracing::span!(
4105+
tracing::Level::INFO,
4106+
"iterate_method_candidates_dyn",
4107+
with_local_impls = traits_in_scope.len(),
4108+
traits_in_scope = traits_in_scope.len(),
4109+
?name,
4110+
)
4111+
.entered();
41044112
// There should be no inference vars in types passed here
41054113
let canonical = hir_ty::replace_errors_with_variables(&self.ty);
41064114

@@ -4122,6 +4130,7 @@ impl Type {
41224130
);
41234131
}
41244132

4133+
#[tracing::instrument(skip_all, fields(name = ?name))]
41254134
pub fn iterate_path_candidates<T>(
41264135
&self,
41274136
db: &dyn HirDatabase,
@@ -4150,6 +4159,7 @@ impl Type {
41504159
slot
41514160
}
41524161

4162+
#[tracing::instrument(skip_all, fields(name = ?name))]
41534163
fn iterate_path_candidates_dyn(
41544164
&self,
41554165
db: &dyn HirDatabase,

crates/ide-completion/src/completions/flyimport.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,14 @@ fn import_assets_for_path(
395395
potential_import_name: &str,
396396
qualifier: Option<ast::Path>,
397397
) -> Option<ImportAssets> {
398+
let _p = tracing::span!(
399+
tracing::Level::INFO,
400+
"import_assets_for_path",
401+
?potential_import_name,
402+
?qualifier
403+
)
404+
.entered();
405+
398406
let fuzzy_name_length = potential_import_name.len();
399407
let mut assets_for_path = ImportAssets::for_fuzzy_path(
400408
ctx.module,

crates/ide-db/src/imports/import_assets.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,7 @@ fn assoc_to_item(assoc: AssocItem) -> ItemInNs {
605605
}
606606
}
607607

608+
#[tracing::instrument(skip_all)]
608609
fn get_mod_path(
609610
db: &RootDatabase,
610611
item_to_search: ItemInNs,

0 commit comments

Comments
 (0)