Skip to content

Commit 655fc8c

Browse files
committed
Update comments and variable names
1 parent 1d8d7b1 commit 655fc8c

File tree

2 files changed

+38
-34
lines changed

2 files changed

+38
-34
lines changed

compiler/rustc_hir_analysis/src/astconv/bounds.rs

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -398,14 +398,12 @@ impl<'tcx> dyn AstConv<'tcx> + '_ {
398398
{
399399
alias_ty
400400
} else {
401-
return Err(self.tcx().dcx().emit_err(
402-
crate::errors::ReturnTypeNotationOnNonRpitit {
403-
span: binding.span,
404-
ty: tcx.liberate_late_bound_regions(assoc_item.def_id, output),
405-
fn_span: tcx.hir().span_if_local(assoc_item.def_id),
406-
note: (),
407-
},
408-
));
401+
return Err(tcx.dcx().emit_err(crate::errors::ReturnTypeNotationOnNonRpitit {
402+
span: binding.span,
403+
ty: tcx.liberate_late_bound_regions(assoc_item.def_id, output),
404+
fn_span: tcx.hir().span_if_local(assoc_item.def_id),
405+
note: (),
406+
}));
409407
};
410408

411409
// Finally, move the fn return type's bound vars over to account for the early bound
@@ -417,7 +415,9 @@ impl<'tcx> dyn AstConv<'tcx> + '_ {
417415
let bound_vars = tcx.late_bound_vars(binding.hir_id);
418416
ty::Binder::bind_with_vars(subst_output, bound_vars)
419417
} else {
420-
// Append the generic arguments of the associated type to the `trait_ref`.
418+
// Create the generic arguments for the associated type or constant by joining the
419+
// parent arguments (the arguments of the trait) and the own arguments (the ones of
420+
// the associated item itself) and construct an alias type using them.
421421
candidate.map_bound(|trait_ref| {
422422
let ident = Ident::new(assoc_item.name, binding.item_name.span);
423423
let item_segment = hir::PathSegment {
@@ -428,19 +428,22 @@ impl<'tcx> dyn AstConv<'tcx> + '_ {
428428
infer_args: false,
429429
};
430430

431-
let args_trait_ref_and_assoc_item = self.create_args_for_associated_item(
431+
let alias_args = self.create_args_for_associated_item(
432432
path_span,
433433
assoc_item.def_id,
434434
&item_segment,
435435
trait_ref.args,
436436
);
437+
debug!(?alias_args);
437438

438-
debug!(?args_trait_ref_and_assoc_item);
439-
440-
ty::AliasTy::new(tcx, assoc_item.def_id, args_trait_ref_and_assoc_item)
439+
// Note that we're indeed also using `AliasTy` (alias *type*) for associated
440+
// *constants* to represent *const projections*. Alias *term* would be a more
441+
// appropriate name but alas.
442+
ty::AliasTy::new(tcx, assoc_item.def_id, alias_args)
441443
})
442444
};
443445

446+
// FIXME(associated_const_equality): Can this actually ever fail with assoc consts?
444447
if !speculative {
445448
// Find any late-bound regions declared in `ty` that are not
446449
// declared in the trait-ref or assoc_item. These are not well-formed.
@@ -449,20 +452,20 @@ impl<'tcx> dyn AstConv<'tcx> + '_ {
449452
//
450453
// for<'a> <T as Iterator>::Item = &'a str // <-- 'a is bad
451454
// for<'a> <T as FnMut<(&'a u32,)>>::Output = &'a str // <-- 'a is ok
452-
if let ConvertedBindingKind::Equality(ty) = binding.kind {
453-
let late_bound_in_trait_ref =
455+
if let ConvertedBindingKind::Equality(term) = binding.kind {
456+
let late_bound_in_projection_ty =
454457
tcx.collect_constrained_late_bound_regions(&projection_ty);
455-
let late_bound_in_ty =
456-
tcx.collect_referenced_late_bound_regions(&trait_ref.rebind(ty.node));
457-
debug!(?late_bound_in_trait_ref);
458-
debug!(?late_bound_in_ty);
458+
let late_bound_in_term =
459+
tcx.collect_referenced_late_bound_regions(&trait_ref.rebind(term.node));
460+
debug!(?late_bound_in_projection_ty);
461+
debug!(?late_bound_in_term);
459462

460463
// FIXME: point at the type params that don't have appropriate lifetimes:
461464
// struct S1<F: for<'a> Fn(&i32, &i32) -> &'a i32>(F);
462465
// ---- ---- ^^^^^^^
463466
self.validate_late_bound_regions(
464-
late_bound_in_trait_ref,
465-
late_bound_in_ty,
467+
late_bound_in_projection_ty,
468+
late_bound_in_term,
466469
|br_name| {
467470
struct_span_code_err!(
468471
tcx.dcx(),
@@ -480,9 +483,9 @@ impl<'tcx> dyn AstConv<'tcx> + '_ {
480483

481484
match binding.kind {
482485
ConvertedBindingKind::Equality(..) if let ty::AssocKind::Fn = assoc_kind => {
483-
return Err(self.tcx().dcx().emit_err(
484-
crate::errors::ReturnTypeNotationEqualityBound { span: binding.span },
485-
));
486+
return Err(tcx.dcx().emit_err(crate::errors::ReturnTypeNotationEqualityBound {
487+
span: binding.span,
488+
}));
486489
}
487490
ConvertedBindingKind::Equality(term) => {
488491
// "Desugar" a constraint like `T: Iterator<Item = u32>` this to

compiler/rustc_hir_analysis/src/astconv/errors.rs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
239239
None,
240240
) && suggested_name != assoc_name.name
241241
{
242-
// We suggested constraining a type parameter, but the associated type on it
242+
// We suggested constraining a type parameter, but the associated item on it
243243
// was also not an exact match, so we also suggest changing it.
244244
err.span_suggestion_verbose(
245245
assoc_name.span,
@@ -254,16 +254,17 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
254254
}
255255
}
256256

257-
// If we still couldn't find any associated type, and only one associated type exists,
257+
// If we still couldn't find any associated item, and only one associated item exists,
258258
// suggests using it.
259259
if let [candidate_name] = all_candidate_names.as_slice() {
260-
// this should still compile, except on `#![feature(associated_type_defaults)]`
261-
// where it could suggests `type A = Self::A`, thus recursing infinitely
262-
let applicability = if tcx.features().associated_type_defaults {
263-
Applicability::Unspecified
264-
} else {
265-
Applicability::MaybeIncorrect
266-
};
260+
// This should still compile, except on `#![feature(associated_type_defaults)]`
261+
// where it could suggests `type A = Self::A`, thus recursing infinitely.
262+
let applicability =
263+
if assoc_kind == ty::AssocKind::Type && tcx.features().associated_type_defaults {
264+
Applicability::Unspecified
265+
} else {
266+
Applicability::MaybeIncorrect
267+
};
267268

268269
err.sugg = Some(errors::AssocItemNotFoundSugg::Other {
269270
span: assoc_name.span,
@@ -319,7 +320,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
319320
};
320321

321322
// For equality bounds, we want to blame the term (RHS) instead of the item (LHS) since
322-
// one can argue that that's more “untuitive” to the user.
323+
// one can argue that that's more “intuitive” to the user.
323324
let (span, expected_because_label, expected, got) = if let Some(binding) = binding
324325
&& let ConvertedBindingKind::Equality(term) = binding.kind
325326
{

0 commit comments

Comments
 (0)