Move has_self
field to hir::AssocKind::Fn
.
`hir::AssocItem` currently has a boolean `fn_has_self_parameter` field, which is misplaced, because it's only relevant for associated fns, not for associated consts or types. This commit moves it (and renames it) to the `AssocKind::Fn` variant, where it belongs. This requires introducing a new C-style enum, `AssocTag`, which is like `AssocKind` but without the fields. This is because `AssocKind` values are passed to various functions like `find_by_ident_and_kind` to indicate what kind of associated item should be searched for, and having to specify `has_self` isn't relevant there. New methods: - Predicates `AssocItem::is_fn` and `AssocItem::is_method`. - `AssocItem::as_tag` which converts `AssocItem::kind` to `AssocTag`. Removed `find_by_name_and_kinds`, which is unused. `AssocItem::descr` can now distinguish between methods and associated functions, which slightly improves some error messages.
This commit is contained in:
parent
abce592029
commit
ce2aa97cd6
60 changed files with 288 additions and 284 deletions
|
@ -57,14 +57,14 @@ note: required for `Fooy<T>` to implement `Copy`
|
|||
|
|
||||
LL | #[derive(Copy, Clone)]
|
||||
| ^^^^ unsatisfied trait bound introduced in this `derive` macro
|
||||
note: the requirement `Fooy<T>: Copy` appears on the `impl`'s method `d` but not on the corresponding trait's method
|
||||
note: the requirement `Fooy<T>: Copy` appears on the `impl`'s associated function `d` but not on the corresponding trait's associated function
|
||||
--> $DIR/impl_bounds.rs:7:8
|
||||
|
|
||||
LL | trait Foo {
|
||||
| --- in this trait
|
||||
...
|
||||
LL | fn d() where Self: Clone;
|
||||
| ^ this trait's method doesn't have the requirement `Fooy<T>: Copy`
|
||||
| ^ this trait's associated function doesn't have the requirement `Fooy<T>: Copy`
|
||||
help: consider restricting type parameter `T` with trait `Copy`
|
||||
|
|
||||
LL | impl<T: std::marker::Copy> Foo for Fooy<T> {
|
||||
|
|
|
@ -4,14 +4,14 @@ error[E0275]: overflow evaluating the requirement `<() as A<T>>::Assoc: A<T>`
|
|||
LL | Self::Assoc: A<T>,
|
||||
| ^^^^
|
||||
|
|
||||
note: the requirement `<() as A<T>>::Assoc: A<T>` appears on the `impl`'s method `f` but not on the corresponding trait's method
|
||||
note: the requirement `<() as A<T>>::Assoc: A<T>` appears on the `impl`'s associated function `f` but not on the corresponding trait's associated function
|
||||
--> $DIR/normalize-param-env-2.rs:12:8
|
||||
|
|
||||
LL | trait A<T> {
|
||||
| - in this trait
|
||||
...
|
||||
LL | fn f()
|
||||
| ^ this trait's method doesn't have the requirement `<() as A<T>>::Assoc: A<T>`
|
||||
| ^ this trait's associated function doesn't have the requirement `<() as A<T>>::Assoc: A<T>`
|
||||
|
||||
error[E0275]: overflow evaluating the requirement `<() as A<T>>::Assoc: A<T>`
|
||||
--> $DIR/normalize-param-env-2.rs:24:22
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue