Skip to content

Suggest Trait<Ty: Trait2> syntax when user typed Trait<Ty = Trait2> #105056

Closed
@jdahlstrom

Description

@jdahlstrom

Consider the following code:

trait Foo {}

fn bar(_: impl Iterator<Item = Foo>) {}

// Or another similar case:

trait Bar {
    type X: Iterator<Item = Foo>;
}

The current output is:

error[E0782]: trait objects must include the `dyn` keyword
 --> src/lib.rs:3:32
  |
3 | fn bar(_: impl Iterator<Item = Foo>) {}
  |                                ^^^
  |
help: add `dyn` keyword before this trait
  |
3 | fn bar(_: impl Iterator<Item = dyn Foo>) {}
  |                                +++

This is reasonable especially in light of the ongoing migration from the old dyn-less trait object syntax. However, an alternative interpretation of the syntax error is that the user accidentally used a type equality bound = when they actually meant a trait bound :. The error message could include a suggestion to replace = with :.

help: or if you meant to write a trait bound, replace `=` with `:`
  |
3 | fn bar(_: impl Iterator<Item = Foo>) {}
  |                             --
3 | fn bar(_: impl Iterator<Item: Foo>) {}
  |                             +

See also related #99304 which proposes that impl Foo should be suggested rather than dyn Foo.

Metadata

Metadata

Assignees

Labels

A-diagnosticsArea: Messages for errors, warnings, and lintsA-suggestion-diagnosticsArea: Suggestions generated by the compiler applied by `cargo fix`F-associated_type_bounds`#![feature(associated_type_bounds)]`T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.requires-nightlyThis issue requires a nightly compiler in some way.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions