
`resolve_ident_in_lexical_scope` checks for an empty name. Why is this necessary? Because `parse_item_impl` can produce an `impl` block with an empty trait name in some cases. This is pretty gross and very non-obvious. This commit avoids the use of the empty trait name. In one case the trait name is instead pulled from `TyKind::ImplTrait`, which prevents the output for `tests/ui/impl-trait/extra-impl-in-trait-impl.rs` from changing. In the other case we just fail the parse and don't try to recover. I think losing error recovery in this obscure case is worth the code cleanup. This change affects `tests/ui/parser/impl-parsing.rs`, which is split in two, and the obsolete `..` syntax cases are removed (they are tested elsewhere).
5 lines
170 B
Rust
5 lines
170 B
Rust
impl ! {} // OK
|
|
impl ! where u8: Copy {} // OK
|
|
|
|
impl Trait Type {} //~ ERROR missing `for` in a trait impl
|
|
impl ?Sized for Type {} //~ ERROR expected a trait, found type
|