Rollup merge of #125635 - fmease:mv-type-binding-assoc-item-constraint, r=compiler-errors
Rename HIR `TypeBinding` to `AssocItemConstraint` and related cleanup Rename `hir::TypeBinding` and `ast::AssocConstraint` to `AssocItemConstraint` and update all items and locals using the old terminology. Motivation: The terminology *type binding* is extremely outdated. "Type bindings" not only include constraints on associated *types* but also on associated *constants* (feature `associated_const_equality`) and on RPITITs of associated *functions* (feature `return_type_notation`). Hence the word *item* in the new name. Furthermore, the word *binding* commonly refers to a mapping from a binder/identifier to a "value" for some definition of "value". Its use in "type binding" made sense when equality constraints (e.g., `AssocTy = Ty`) were the only kind of associated item constraint. Nowadays however, we also have *associated type bounds* (e.g., `AssocTy: Bound`) for which the term *binding* doesn't make sense. --- Old terminology (HIR, rustdoc): ``` `TypeBinding`: (associated) type binding ├── `Constraint`: associated type bound └── `Equality`: (associated) equality constraint (?) ├── `Ty`: (associated) type binding └── `Const`: associated const equality (constraint) ``` Old terminology (AST, abbrev.): ``` `AssocConstraint` ├── `Bound` └── `Equality` ├── `Ty` └── `Const` ``` New terminology (AST, HIR, rustdoc): ``` `AssocItemConstraint`: associated item constraint ├── `Bound`: associated type bound └── `Equality`: associated item equality constraint OR associated item binding (for short) ├── `Ty`: associated type equality constraint OR associated type binding (for short) └── `Const`: associated const equality constraint OR associated const binding (for short) ``` r? compiler-errors
This commit is contained in:
commit
379233242b
108 changed files with 878 additions and 818 deletions
|
@ -7,8 +7,8 @@ use ast::token::IdentIsRaw;
|
|||
use rustc_ast::ptr::P;
|
||||
use rustc_ast::token::{self, Delimiter, Token, TokenKind};
|
||||
use rustc_ast::{
|
||||
self as ast, AngleBracketedArg, AngleBracketedArgs, AnonConst, AssocConstraint,
|
||||
AssocConstraintKind, BlockCheckMode, GenericArg, GenericArgs, Generics, ParenthesizedArgs,
|
||||
self as ast, AngleBracketedArg, AngleBracketedArgs, AnonConst, AssocItemConstraint,
|
||||
AssocItemConstraintKind, BlockCheckMode, GenericArg, GenericArgs, Generics, ParenthesizedArgs,
|
||||
Path, PathSegment, QSelf,
|
||||
};
|
||||
use rustc_errors::{Applicability, Diag, PResult};
|
||||
|
@ -720,10 +720,7 @@ impl<'a> Parser<'a> {
|
|||
));
|
||||
}
|
||||
let kind = if self.eat(&token::Colon) {
|
||||
// Parse associated type constraint bound.
|
||||
|
||||
let bounds = self.parse_generic_bounds()?;
|
||||
AssocConstraintKind::Bound { bounds }
|
||||
AssocItemConstraintKind::Bound { bounds: self.parse_generic_bounds()? }
|
||||
} else if self.eat(&token::Eq) {
|
||||
self.parse_assoc_equality_term(
|
||||
ident,
|
||||
|
@ -735,17 +732,17 @@ impl<'a> Parser<'a> {
|
|||
};
|
||||
|
||||
let span = lo.to(self.prev_token.span);
|
||||
// Gate associated type bounds, e.g., `Iterator<Item: Ord>`.
|
||||
if let AssocConstraintKind::Bound { .. } = kind {
|
||||
if let Some(ast::GenericArgs::Parenthesized(args)) = &gen_args
|
||||
&& args.inputs.is_empty()
|
||||
&& matches!(args.output, ast::FnRetTy::Default(..))
|
||||
{
|
||||
self.psess.gated_spans.gate(sym::return_type_notation, span);
|
||||
}
|
||||
|
||||
if let AssocItemConstraintKind::Bound { .. } = kind
|
||||
&& let Some(ast::GenericArgs::Parenthesized(args)) = &gen_args
|
||||
&& args.inputs.is_empty()
|
||||
&& let ast::FnRetTy::Default(..) = args.output
|
||||
{
|
||||
self.psess.gated_spans.gate(sym::return_type_notation, span);
|
||||
}
|
||||
|
||||
let constraint =
|
||||
AssocConstraint { id: ast::DUMMY_NODE_ID, ident, gen_args, kind, span };
|
||||
AssocItemConstraint { id: ast::DUMMY_NODE_ID, ident, gen_args, kind, span };
|
||||
Ok(Some(AngleBracketedArg::Constraint(constraint)))
|
||||
} else {
|
||||
// we only want to suggest `:` and `=` in contexts where the previous token
|
||||
|
@ -772,7 +769,7 @@ impl<'a> Parser<'a> {
|
|||
ident: Ident,
|
||||
gen_args: Option<&GenericArgs>,
|
||||
eq: Span,
|
||||
) -> PResult<'a, AssocConstraintKind> {
|
||||
) -> PResult<'a, AssocItemConstraintKind> {
|
||||
let arg = self.parse_generic_arg(None)?;
|
||||
let span = ident.span.to(self.prev_token.span);
|
||||
let term = match arg {
|
||||
|
@ -820,7 +817,7 @@ impl<'a> Parser<'a> {
|
|||
return Err(err);
|
||||
}
|
||||
};
|
||||
Ok(AssocConstraintKind::Equality { term })
|
||||
Ok(AssocItemConstraintKind::Equality { term })
|
||||
}
|
||||
|
||||
/// We do not permit arbitrary expressions as const arguments. They must be one of:
|
||||
|
@ -941,7 +938,7 @@ impl<'a> Parser<'a> {
|
|||
}
|
||||
|
||||
/// Given a arg inside of generics, we try to destructure it as if it were the LHS in
|
||||
/// `LHS = ...`, i.e. an associated type binding.
|
||||
/// `LHS = ...`, i.e. an associated item binding.
|
||||
/// This returns a bool indicating if there are any `for<'a, 'b>` binder args, the
|
||||
/// identifier, and any GAT arguments.
|
||||
fn get_ident_from_generic_arg(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue