resolve: improve "try using tuple struct" message
This commit improves the tuple struct case added in rust-lang/rust#77341 so that the context is mentioned in more of the message. Signed-off-by: David Wood <david@davidtw.co>
This commit is contained in:
parent
adf31e95e4
commit
f897162f3e
@ -1341,21 +1341,6 @@ fn suggest_using_enum_variant(
|
|||||||
|
|
||||||
let non_suggestable_variant_count = variants.len() - suggestable_variants.len();
|
let non_suggestable_variant_count = variants.len() - suggestable_variants.len();
|
||||||
|
|
||||||
if !suggestable_variants.is_empty() {
|
|
||||||
let msg = if non_suggestable_variant_count == 0 && suggestable_variants.len() == 1 {
|
|
||||||
"try using the enum's variant"
|
|
||||||
} else {
|
|
||||||
"try using one of the enum's variants"
|
|
||||||
};
|
|
||||||
|
|
||||||
err.span_suggestions(
|
|
||||||
span,
|
|
||||||
msg,
|
|
||||||
suggestable_variants.drain(..),
|
|
||||||
Applicability::MaybeIncorrect,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
let source_msg = if source.is_call() {
|
let source_msg = if source.is_call() {
|
||||||
"to construct"
|
"to construct"
|
||||||
} else if matches!(source, PathSource::TupleStruct(..)) {
|
} else if matches!(source, PathSource::TupleStruct(..)) {
|
||||||
@ -1364,6 +1349,21 @@ fn suggest_using_enum_variant(
|
|||||||
unreachable!()
|
unreachable!()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if !suggestable_variants.is_empty() {
|
||||||
|
let msg = if non_suggestable_variant_count == 0 && suggestable_variants.len() == 1 {
|
||||||
|
format!("try {} the enum's variant", source_msg)
|
||||||
|
} else {
|
||||||
|
format!("try {} one of the enum's variants", source_msg)
|
||||||
|
};
|
||||||
|
|
||||||
|
err.span_suggestions(
|
||||||
|
span,
|
||||||
|
&msg,
|
||||||
|
suggestable_variants.drain(..),
|
||||||
|
Applicability::MaybeIncorrect,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// If the enum has no tuple variants..
|
// If the enum has no tuple variants..
|
||||||
if non_suggestable_variant_count == variants.len() {
|
if non_suggestable_variant_count == variants.len() {
|
||||||
err.help(&format!("the enum has no tuple variants {}", source_msg));
|
err.help(&format!("the enum has no tuple variants {}", source_msg));
|
||||||
|
@ -2,7 +2,7 @@ error[E0423]: expected function, tuple struct or tuple variant, found enum `Opti
|
|||||||
--> $DIR/issue-43871-enum-instead-of-variant.rs:19:13
|
--> $DIR/issue-43871-enum-instead-of-variant.rs:19:13
|
||||||
|
|
|
|
||||||
LL | let x = Option(1);
|
LL | let x = Option(1);
|
||||||
| ^^^^^^ help: try using one of the enum's variants: `std::option::Option::Some`
|
| ^^^^^^ help: try to construct one of the enum's variants: `std::option::Option::Some`
|
||||||
|
|
|
|
||||||
= help: you might have meant to construct the enum's non-tuple variant
|
= help: you might have meant to construct the enum's non-tuple variant
|
||||||
|
|
||||||
@ -10,7 +10,7 @@ error[E0532]: expected tuple struct or tuple variant, found enum `Option`
|
|||||||
--> $DIR/issue-43871-enum-instead-of-variant.rs:21:12
|
--> $DIR/issue-43871-enum-instead-of-variant.rs:21:12
|
||||||
|
|
|
|
||||||
LL | if let Option(_) = x {
|
LL | if let Option(_) = x {
|
||||||
| ^^^^^^ help: try using one of the enum's variants: `std::option::Option::Some`
|
| ^^^^^^ help: try to match against one of the enum's variants: `std::option::Option::Some`
|
||||||
|
|
|
|
||||||
= help: you might have meant to match against the enum's non-tuple variant
|
= help: you might have meant to match against the enum's non-tuple variant
|
||||||
|
|
||||||
@ -18,7 +18,7 @@ error[E0532]: expected tuple struct or tuple variant, found enum `Example`
|
|||||||
--> $DIR/issue-43871-enum-instead-of-variant.rs:27:12
|
--> $DIR/issue-43871-enum-instead-of-variant.rs:27:12
|
||||||
|
|
|
|
||||||
LL | if let Example(_) = y {
|
LL | if let Example(_) = y {
|
||||||
| ^^^^^^^ help: try using one of the enum's variants: `Example::Ex`
|
| ^^^^^^^ help: try to match against one of the enum's variants: `Example::Ex`
|
||||||
|
|
|
|
||||||
= help: you might have meant to match against the enum's non-tuple variant
|
= help: you might have meant to match against the enum's non-tuple variant
|
||||||
note: the enum is defined here
|
note: the enum is defined here
|
||||||
|
@ -118,7 +118,7 @@ LL | | Tuple(),
|
|||||||
LL | | Unit,
|
LL | | Unit,
|
||||||
LL | | }
|
LL | | }
|
||||||
| |_^
|
| |_^
|
||||||
help: try using one of the enum's variants
|
help: try to construct one of the enum's variants
|
||||||
|
|
|
|
||||||
LL | let x = A::TupleWithFields(3);
|
LL | let x = A::TupleWithFields(3);
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^
|
||||||
@ -143,7 +143,7 @@ LL | | Tuple(),
|
|||||||
LL | | Unit,
|
LL | | Unit,
|
||||||
LL | | }
|
LL | | }
|
||||||
| |_^
|
| |_^
|
||||||
help: try using one of the enum's variants
|
help: try to match against one of the enum's variants
|
||||||
|
|
|
|
||||||
LL | if let A::TupleWithFields(3) = x { }
|
LL | if let A::TupleWithFields(3) = x { }
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^
|
||||||
|
Loading…
Reference in New Issue
Block a user