2017-07-11 22:03:58 -05:00
|
|
|
enum DoubleOption<T> {
|
|
|
|
FirstSome(T),
|
|
|
|
AlternativeSome(T),
|
path, not name, in sole-argument variant type mismatch suggestion
We want the suggested replacement (which IDE tooling and such might offer to
automatically swap in) to, like, actually be correct: suggesting `MyVariant(x)`
when the actual fix is `MyEnum::MyVariant(x)` might be better than nothing, but
Rust is supposed to be the future of computing: we're better than better than
nothing.
As an exceptional case, we excise the prelude path, preferring to suggest
`Some` or `Ok` rather than `std::prelude::v1::Some` and
`std::prelude::v2::Ok`. (It's not worth the effort to future-proof against
hypothetical preludes v2, v3, &c.: we trust our successors to grep—excuse me,
ripgrep—for that.)
Also, don't make this preëmpt the existing probe-for-return-type suggestions,
despite their being looked unfavorably upon, at least in this situation
(https://github.com/rust-lang/rust/issues/42764#issuecomment-311388958): Cody
Schafer pointed out that that's a separate issue
(https://github.com/rust-lang/rust/pull/43178#issuecomment-314953229).
This is in the matter of #42764.
2017-07-15 12:26:11 -05:00
|
|
|
Nothing,
|
2017-07-11 22:03:58 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
fn this_function_expects_a_double_option<T>(d: DoubleOption<T>) {}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let n: usize = 42;
|
|
|
|
this_function_expects_a_double_option(n);
|
2017-11-20 06:13:27 -06:00
|
|
|
//~^ ERROR mismatched types
|
2021-11-04 11:57:30 -05:00
|
|
|
//~| HELP try wrapping the expression in a variant of `DoubleOption`
|
2018-10-21 17:37:01 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// But don't issue the "try using a variant" help if the one-"variant" ADT is
|
|
|
|
// actually a one-field struct.
|
|
|
|
|
|
|
|
struct Payload;
|
|
|
|
|
|
|
|
struct Wrapper { payload: Payload }
|
|
|
|
|
|
|
|
struct Context { wrapper: Wrapper }
|
|
|
|
|
|
|
|
fn overton() {
|
|
|
|
let _c = Context { wrapper: Payload{} };
|
|
|
|
//~^ ERROR mismatched types
|
2022-07-31 09:09:39 -05:00
|
|
|
//~| try wrapping the expression in `Wrapper`
|
2017-07-11 22:03:58 -05:00
|
|
|
}
|