Rollup merge of #104505 - WaffleLapkin:no-double-spaces-in-comments, r=jackh726
Remove double spaces after dots in comments Most of the comments do not have double spaces, so I assume these are typos.
This commit is contained in:
commit
68f12338af
158 changed files with 333 additions and 313 deletions
|
@ -331,7 +331,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
|||
}
|
||||
if potential_assoc_types.len() == assoc_items.len() {
|
||||
// When the amount of missing associated types equals the number of
|
||||
// extra type arguments present. A suggesting to replace the generic args with
|
||||
// extra type arguments present. A suggesting to replace the generic args with
|
||||
// associated types is already emitted.
|
||||
already_has_generics_args_suggestion = true;
|
||||
} else if let (Ok(snippet), false) =
|
||||
|
|
|
@ -337,13 +337,13 @@ pub fn create_substs_for_generic_args<'tcx, 'a>(
|
|||
// We should never be able to reach this point with well-formed input.
|
||||
// There are three situations in which we can encounter this issue.
|
||||
//
|
||||
// 1. The number of arguments is incorrect. In this case, an error
|
||||
// will already have been emitted, and we can ignore it.
|
||||
// 2. There are late-bound lifetime parameters present, yet the
|
||||
// lifetime arguments have also been explicitly specified by the
|
||||
// user.
|
||||
// 3. We've inferred some lifetimes, which have been provided later (i.e.
|
||||
// after a type or const). We want to throw an error in this case.
|
||||
// 1. The number of arguments is incorrect. In this case, an error
|
||||
// will already have been emitted, and we can ignore it.
|
||||
// 2. There are late-bound lifetime parameters present, yet the
|
||||
// lifetime arguments have also been explicitly specified by the
|
||||
// user.
|
||||
// 3. We've inferred some lifetimes, which have been provided later (i.e.
|
||||
// after a type or const). We want to throw an error in this case.
|
||||
|
||||
if arg_count.correct.is_ok()
|
||||
&& arg_count.explicit_late_bound == ExplicitLateBound::No
|
||||
|
|
|
@ -992,7 +992,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
|||
/// ```
|
||||
///
|
||||
/// The `sized_by_default` parameter indicates if, in this context, the `param_ty` should be
|
||||
/// considered `Sized` unless there is an explicit `?Sized` bound. This would be true in the
|
||||
/// considered `Sized` unless there is an explicit `?Sized` bound. This would be true in the
|
||||
/// example above, but is not true in supertrait listings like `trait Foo: Bar + Baz`.
|
||||
///
|
||||
/// `span` should be the declaration size of the parameter.
|
||||
|
@ -1497,7 +1497,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
|||
i.trait_ref().map_bound(|trait_ref: ty::TraitRef<'tcx>| {
|
||||
assert_eq!(trait_ref.self_ty(), dummy_self);
|
||||
|
||||
// Verify that `dummy_self` did not leak inside default type parameters. This
|
||||
// Verify that `dummy_self` did not leak inside default type parameters. This
|
||||
// could not be done at path creation, since we need to see through trait aliases.
|
||||
let mut missing_type_params = vec![];
|
||||
let mut references_self = false;
|
||||
|
@ -2832,7 +2832,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
|||
}
|
||||
|
||||
/// Parses the programmer's textual representation of a type into our
|
||||
/// internal notion of a type. This is meant to be used within a path.
|
||||
/// internal notion of a type. This is meant to be used within a path.
|
||||
pub fn ast_ty_to_ty_in_path(&self, ast_ty: &hir::Ty<'_>) -> Ty<'tcx> {
|
||||
self.ast_ty_to_ty_inner(ast_ty, false, true)
|
||||
}
|
||||
|
|
|
@ -138,7 +138,7 @@ pub(super) fn compare_impl_method<'tcx>(
|
|||
/// <'a> fn(t: &'i0 U0, m: &'a) -> Foo
|
||||
///
|
||||
/// This type is also the same but the name of the bound region (`'a`
|
||||
/// vs `'b`). However, the normal subtyping rules on fn types handle
|
||||
/// vs `'b`). However, the normal subtyping rules on fn types handle
|
||||
/// this kind of equivalency just fine.
|
||||
///
|
||||
/// We now use these substitutions to ensure that all declared bounds are
|
||||
|
@ -764,7 +764,7 @@ pub(super) fn collect_return_position_impl_trait_in_trait_tys<'tcx>(
|
|||
match infcx.fully_resolve(ty) {
|
||||
Ok(ty) => {
|
||||
// `ty` contains free regions that we created earlier while liberating the
|
||||
// trait fn signature. However, projection normalization expects `ty` to
|
||||
// trait fn signature. However, projection normalization expects `ty` to
|
||||
// contains `def_id`'s early-bound regions.
|
||||
let id_substs = InternalSubsts::identity_for_item(tcx, def_id);
|
||||
debug!(?id_substs, ?substs);
|
||||
|
@ -1022,7 +1022,7 @@ fn check_region_bounds_on_impl_item<'tcx>(
|
|||
|
||||
// Must have same number of early-bound lifetime parameters.
|
||||
// Unfortunately, if the user screws up the bounds, then this
|
||||
// will change classification between early and late. E.g.,
|
||||
// will change classification between early and late. E.g.,
|
||||
// if in trait we have `<'a,'b:'a>`, and in impl we just have
|
||||
// `<'a,'b>`, then we have 2 early-bound lifetime parameters
|
||||
// in trait but 0 in the impl. But if we report "expected 2
|
||||
|
@ -1133,9 +1133,9 @@ fn compare_self_type<'tcx>(
|
|||
impl_trait_ref: ty::TraitRef<'tcx>,
|
||||
) -> Result<(), ErrorGuaranteed> {
|
||||
// Try to give more informative error messages about self typing
|
||||
// mismatches. Note that any mismatch will also be detected
|
||||
// mismatches. Note that any mismatch will also be detected
|
||||
// below, where we construct a canonical function type that
|
||||
// includes the self parameter as a normal parameter. It's just
|
||||
// includes the self parameter as a normal parameter. It's just
|
||||
// that the error messages you get out of this code are a bit more
|
||||
// inscrutable, particularly for cases where one method has no
|
||||
// self.
|
||||
|
|
|
@ -46,7 +46,7 @@ pub fn check_drop_impl(tcx: TyCtxt<'_>, drop_impl_did: DefId) -> Result<(), Erro
|
|||
)
|
||||
}
|
||||
_ => {
|
||||
// Destructors only work on nominal types. This was
|
||||
// Destructors only work on nominal types. This was
|
||||
// already checked by coherence, but compilation may
|
||||
// not have been terminated.
|
||||
let span = tcx.def_span(drop_impl_did);
|
||||
|
|
|
@ -14,23 +14,23 @@ can be broken down into several distinct phases:
|
|||
|
||||
- main: the main pass does the lion's share of the work: it
|
||||
determines the types of all expressions, resolves
|
||||
methods, checks for most invalid conditions, and so forth. In
|
||||
methods, checks for most invalid conditions, and so forth. In
|
||||
some cases, where a type is unknown, it may create a type or region
|
||||
variable and use that as the type of an expression.
|
||||
|
||||
In the process of checking, various constraints will be placed on
|
||||
these type variables through the subtyping relationships requested
|
||||
through the `demand` module. The `infer` module is in charge
|
||||
through the `demand` module. The `infer` module is in charge
|
||||
of resolving those constraints.
|
||||
|
||||
- regionck: after main is complete, the regionck pass goes over all
|
||||
types looking for regions and making sure that they did not escape
|
||||
into places where they are not in scope. This may also influence the
|
||||
into places where they are not in scope. This may also influence the
|
||||
final assignments of the various region variables if there is some
|
||||
flexibility.
|
||||
|
||||
- writeback: writes the final types within a function body, replacing
|
||||
type variables with their final inferred types. These final types
|
||||
type variables with their final inferred types. These final types
|
||||
are written into the `tcx.node_types` table, which should *never* contain
|
||||
any reference to a type variable.
|
||||
|
||||
|
@ -38,8 +38,8 @@ can be broken down into several distinct phases:
|
|||
|
||||
While type checking a function, the intermediate types for the
|
||||
expressions, blocks, and so forth contained within the function are
|
||||
stored in `fcx.node_types` and `fcx.node_substs`. These types
|
||||
may contain unresolved type variables. After type checking is
|
||||
stored in `fcx.node_types` and `fcx.node_substs`. These types
|
||||
may contain unresolved type variables. After type checking is
|
||||
complete, the functions in the writeback module are used to take the
|
||||
types from this table, resolve them, and then write them into their
|
||||
permanent home in the type context `tcx`.
|
||||
|
@ -51,12 +51,12 @@ nodes within the function.
|
|||
The types of top-level items, which never contain unbound type
|
||||
variables, are stored directly into the `tcx` typeck_results.
|
||||
|
||||
N.B., a type variable is not the same thing as a type parameter. A
|
||||
N.B., a type variable is not the same thing as a type parameter. A
|
||||
type variable is an instance of a type parameter. That is,
|
||||
given a generic function `fn foo<T>(t: T)`, while checking the
|
||||
function `foo`, the type `ty_param(0)` refers to the type `T`, which
|
||||
is treated in abstract. However, when `foo()` is called, `T` will be
|
||||
substituted for a fresh type variable `N`. This variable will
|
||||
substituted for a fresh type variable `N`. This variable will
|
||||
eventually be resolved to some concrete type (which might itself be
|
||||
a type parameter).
|
||||
|
||||
|
@ -441,7 +441,7 @@ fn suggestion_signature(assoc: &ty::AssocItem, tcx: TyCtxt<'_>) -> String {
|
|||
ty::AssocKind::Fn => {
|
||||
// We skip the binder here because the binder would deanonymize all
|
||||
// late-bound regions, and we don't want method signatures to show up
|
||||
// `as for<'r> fn(&'r MyType)`. Pretty-printing handles late-bound
|
||||
// `as for<'r> fn(&'r MyType)`. Pretty-printing handles late-bound
|
||||
// regions just fine, showing `fn(&MyType)`.
|
||||
fn_sig_suggestion(
|
||||
tcx,
|
||||
|
|
|
@ -325,7 +325,7 @@ fn resolve_expr<'tcx>(visitor: &mut RegionResolutionVisitor<'tcx>, expr: &'tcx h
|
|||
// The idea is that call.callee_id represents *the time when
|
||||
// the invoked function is actually running* and call.id
|
||||
// represents *the time to prepare the arguments and make the
|
||||
// call*. See the section "Borrows in Calls" borrowck/README.md
|
||||
// call*. See the section "Borrows in Calls" borrowck/README.md
|
||||
// for an extended explanation of why this distinction is
|
||||
// important.
|
||||
//
|
||||
|
|
|
@ -50,7 +50,7 @@ pub fn check_crate(tcx: TyCtxt<'_>) {
|
|||
fn unused_crates_lint(tcx: TyCtxt<'_>) {
|
||||
let lint = lint::builtin::UNUSED_EXTERN_CRATES;
|
||||
|
||||
// Collect first the crates that are completely unused. These we
|
||||
// Collect first the crates that are completely unused. These we
|
||||
// can always suggest removing (no matter which edition we are
|
||||
// in).
|
||||
let unused_extern_crates: FxHashMap<LocalDefId, Span> = tcx
|
||||
|
|
|
@ -438,7 +438,7 @@ pub fn coerce_unsized_info<'tcx>(tcx: TyCtxt<'tcx>, impl_did: DefId) -> CoerceUn
|
|||
// when this coercion occurs, we would be changing the
|
||||
// field `ptr` from a thin pointer of type `*mut [i32;
|
||||
// 3]` to a fat pointer of type `*mut [i32]` (with
|
||||
// extra data `3`). **The purpose of this check is to
|
||||
// extra data `3`). **The purpose of this check is to
|
||||
// make sure that we know how to do this conversion.**
|
||||
//
|
||||
// To check if this impl is legal, we would walk down
|
||||
|
|
|
@ -171,7 +171,7 @@ fn check_object_overlap<'tcx>(
|
|||
for component_def_id in component_def_ids {
|
||||
if !tcx.is_object_safe(component_def_id) {
|
||||
// Without the 'object_safe_for_dispatch' feature this is an error
|
||||
// which will be reported by wfcheck. Ignore it here.
|
||||
// which will be reported by wfcheck. Ignore it here.
|
||||
// This is tested by `coherence-impl-trait-for-trait-object-safe.rs`.
|
||||
// With the feature enabled, the trait is not implemented automatically,
|
||||
// so this is valid.
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
//! Resolution of early vs late bound lifetimes.
|
||||
//!
|
||||
//! Name resolution for lifetimes is performed on the AST and embedded into HIR. From this
|
||||
//! Name resolution for lifetimes is performed on the AST and embedded into HIR. From this
|
||||
//! information, typechecking needs to transform the lifetime parameters into bound lifetimes.
|
||||
//! Lifetimes can be early-bound or late-bound. Construction of typechecking terms needs to visit
|
||||
//! the types in HIR to identify late-bound lifetimes and assign their Debruijn indices. This file
|
||||
//! Lifetimes can be early-bound or late-bound. Construction of typechecking terms needs to visit
|
||||
//! the types in HIR to identify late-bound lifetimes and assign their Debruijn indices. This file
|
||||
//! is also responsible for assigning their semantics to implicit lifetimes in trait objects.
|
||||
|
||||
use rustc_ast::walk_list;
|
||||
|
@ -70,7 +70,7 @@ impl RegionExt for Region {
|
|||
/// that it corresponds to.
|
||||
///
|
||||
/// FIXME. This struct gets converted to a `ResolveLifetimes` for
|
||||
/// actual use. It has the same data, but indexed by `LocalDefId`. This
|
||||
/// actual use. It has the same data, but indexed by `LocalDefId`. This
|
||||
/// is silly.
|
||||
#[derive(Debug, Default)]
|
||||
struct NamedRegionMap {
|
||||
|
@ -1283,7 +1283,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
|
|||
|
||||
// We may fail to resolve higher-ranked lifetimes that are mentioned by APIT.
|
||||
// AST-based resolution does not care for impl-trait desugaring, which are the
|
||||
// responibility of lowering. This may create a mismatch between the resolution
|
||||
// responibility of lowering. This may create a mismatch between the resolution
|
||||
// AST found (`region_def_id`) which points to HRTB, and what HIR allows.
|
||||
// ```
|
||||
// fn foo(x: impl for<'a> Trait<'a, Assoc = impl Copy + 'a>) {}
|
||||
|
@ -1434,7 +1434,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
|
|||
DefKind::ConstParam => Some(ObjectLifetimeDefault::Empty),
|
||||
DefKind::TyParam => Some(self.tcx.object_lifetime_default(param.def_id)),
|
||||
// We may also get a `Trait` or `TraitAlias` because of how generics `Self` parameter
|
||||
// works. Ignore it because it can't have a meaningful lifetime default.
|
||||
// works. Ignore it because it can't have a meaningful lifetime default.
|
||||
DefKind::LifetimeParam | DefKind::Trait | DefKind::TraitAlias => None,
|
||||
dk => bug!("unexpected def_kind {:?}", dk),
|
||||
}
|
||||
|
|
|
@ -247,7 +247,7 @@ fn gather_explicit_predicates_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericP
|
|||
|
||||
// Subtle: before we store the predicates into the tcx, we
|
||||
// sort them so that predicates like `T: Foo<Item=U>` come
|
||||
// before uses of `U`. This avoids false ambiguity errors
|
||||
// before uses of `U`. This avoids false ambiguity errors
|
||||
// in trait checking. See `setup_constraining_predicates`
|
||||
// for details.
|
||||
if let Node::Item(&Item { kind: ItemKind::Impl { .. }, .. }) = node {
|
||||
|
|
|
@ -22,7 +22,7 @@ several major phases:
|
|||
4. Finally, the check phase then checks function bodies and so forth.
|
||||
Within the check phase, we check each function body one at a time
|
||||
(bodies of function expressions are checked as part of the
|
||||
containing function). Inference is used to supply types wherever
|
||||
containing function). Inference is used to supply types wherever
|
||||
they are unknown. The actual checking of a function itself has
|
||||
several phases (check, regionck, writeback), as discussed in the
|
||||
documentation for the [`check`] module.
|
||||
|
@ -46,7 +46,7 @@ independently:
|
|||
local variables, type parameters, etc as necessary.
|
||||
|
||||
- infer: finds the types to use for each type variable such that
|
||||
all subtyping and assignment constraints are met. In essence, the check
|
||||
all subtyping and assignment constraints are met. In essence, the check
|
||||
module specifies the constraints, and the infer module solves them.
|
||||
|
||||
## Note
|
||||
|
@ -542,7 +542,7 @@ pub fn check_crate(tcx: TyCtxt<'_>) -> Result<(), ErrorGuaranteed> {
|
|||
pub fn hir_ty_to_ty<'tcx>(tcx: TyCtxt<'tcx>, hir_ty: &hir::Ty<'_>) -> Ty<'tcx> {
|
||||
// In case there are any projections, etc., find the "environment"
|
||||
// def-ID that will be used to determine the traits/predicates in
|
||||
// scope. This is derived from the enclosing item-like thing.
|
||||
// scope. This is derived from the enclosing item-like thing.
|
||||
let env_def_id = tcx.hir().get_parent_item(hir_ty.hir_id);
|
||||
let item_cx = self::collect::ItemCtxt::new(tcx, env_def_id.to_def_id());
|
||||
item_cx.astconv().ast_ty_to_ty(hir_ty)
|
||||
|
@ -555,7 +555,7 @@ pub fn hir_trait_to_predicates<'tcx>(
|
|||
) -> Bounds<'tcx> {
|
||||
// In case there are any projections, etc., find the "environment"
|
||||
// def-ID that will be used to determine the traits/predicates in
|
||||
// scope. This is derived from the enclosing item-like thing.
|
||||
// scope. This is derived from the enclosing item-like thing.
|
||||
let env_def_id = tcx.hir().get_parent_item(hir_trait.hir_ref_id);
|
||||
let item_cx = self::collect::ItemCtxt::new(tcx, env_def_id.to_def_id());
|
||||
let mut bounds = Bounds::default();
|
||||
|
|
|
@ -139,7 +139,7 @@ fn insert_required_predicates_to_be_wf<'tcx>(
|
|||
if let Some(unsubstituted_predicates) = global_inferred_outlives.get(&def.did()) {
|
||||
for (unsubstituted_predicate, &span) in &unsubstituted_predicates.0 {
|
||||
// `unsubstituted_predicate` is `U: 'b` in the
|
||||
// example above. So apply the substitution to
|
||||
// example above. So apply the substitution to
|
||||
// get `T: 'a` (or `predicate`):
|
||||
let predicate = unsubstituted_predicates
|
||||
.rebind(*unsubstituted_predicate)
|
||||
|
|
|
@ -48,7 +48,7 @@ pub(crate) fn insert_outlives_predicate<'tcx>(
|
|||
// ```
|
||||
//
|
||||
// Here `outlived_region = 'a` and `kind = &'b
|
||||
// u32`. Decomposing `&'b u32` into
|
||||
// u32`. Decomposing `&'b u32` into
|
||||
// components would yield `'b`, and we add the
|
||||
// where clause that `'b: 'a`.
|
||||
insert_outlives_predicate(
|
||||
|
@ -71,7 +71,7 @@ pub(crate) fn insert_outlives_predicate<'tcx>(
|
|||
// ```
|
||||
//
|
||||
// Here `outlived_region = 'a` and `kind =
|
||||
// Vec<U>`. Decomposing `Vec<U>` into
|
||||
// Vec<U>`. Decomposing `Vec<U>` into
|
||||
// components would yield `U`, and we add the
|
||||
// where clause that `U: 'a`.
|
||||
let ty: Ty<'tcx> = param_ty.to_ty(tcx);
|
||||
|
@ -107,7 +107,7 @@ pub(crate) fn insert_outlives_predicate<'tcx>(
|
|||
|
||||
Component::EscapingProjection(_) => {
|
||||
// As above, but the projection involves
|
||||
// late-bound regions. Therefore, the WF
|
||||
// late-bound regions. Therefore, the WF
|
||||
// requirement is not checked in type definition
|
||||
// but at fn call site, so ignore it.
|
||||
//
|
||||
|
@ -167,7 +167,7 @@ fn is_free_region(region: Region<'_>) -> bool {
|
|||
// }
|
||||
//
|
||||
// The type above might generate a `T: 'b` bound, but we can
|
||||
// ignore it. We can't put it on the struct header anyway.
|
||||
// ignore it. We can't put it on the struct header anyway.
|
||||
ty::ReLateBound(..) => false,
|
||||
|
||||
// These regions don't appear in types from type declarations:
|
||||
|
|
|
@ -44,7 +44,7 @@ pub fn solve_constraints<'tcx>(
|
|||
|
||||
impl<'a, 'tcx> SolveContext<'a, 'tcx> {
|
||||
fn solve(&mut self) {
|
||||
// Propagate constraints until a fixed point is reached. Note
|
||||
// Propagate constraints until a fixed point is reached. Note
|
||||
// that the maximum number of iterations is 2C where C is the
|
||||
// number of constraints (each variable can change values at most
|
||||
// twice). Since number of constraints is linear in size of the
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue