Skip to content

Commit a69f489

Browse files
committed
Update comments and variable names
1 parent e927184 commit a69f489

File tree

2 files changed

+38
-34
lines changed

2 files changed

+38
-34
lines changed

compiler/rustc_hir_analysis/src/astconv/bounds.rs

+27-24
Original file line numberDiff line numberDiff line change
@@ -396,14 +396,12 @@ impl<'tcx> dyn AstConv<'tcx> + '_ {
396396
{
397397
alias_ty
398398
} else {
399-
return Err(self.tcx().dcx().emit_err(
400-
crate::errors::ReturnTypeNotationOnNonRpitit {
401-
span: binding.span,
402-
ty: tcx.liberate_late_bound_regions(assoc_item.def_id, output),
403-
fn_span: tcx.hir().span_if_local(assoc_item.def_id),
404-
note: (),
405-
},
406-
));
399+
return Err(tcx.dcx().emit_err(crate::errors::ReturnTypeNotationOnNonRpitit {
400+
span: binding.span,
401+
ty: tcx.liberate_late_bound_regions(assoc_item.def_id, output),
402+
fn_span: tcx.hir().span_if_local(assoc_item.def_id),
403+
note: (),
404+
}));
407405
};
408406

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

429-
let args_trait_ref_and_assoc_item = self.create_args_for_associated_item(
429+
let alias_args = self.create_args_for_associated_item(
430430
path_span,
431431
assoc_item.def_id,
432432
&item_segment,
433433
trait_ref.args,
434434
);
435+
debug!(?alias_args);
435436

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

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

458461
// FIXME: point at the type params that don't have appropriate lifetimes:
459462
// struct S1<F: for<'a> Fn(&i32, &i32) -> &'a i32>(F);
460463
// ---- ---- ^^^^^^^
461464
self.validate_late_bound_regions(
462-
late_bound_in_trait_ref,
463-
late_bound_in_ty,
465+
late_bound_in_projection_ty,
466+
late_bound_in_term,
464467
|br_name| {
465468
struct_span_err!(
466469
tcx.dcx(),
@@ -478,9 +481,9 @@ impl<'tcx> dyn AstConv<'tcx> + '_ {
478481

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

compiler/rustc_hir_analysis/src/astconv/errors.rs

+11-10
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)