mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-27 22:34:14 +00:00
Rollup merge of #100617 - chenyukang:fix-100605, r=compiler-errors
Suggest the right help message for as_ref Fixes #100605
This commit is contained in:
commit
61a529d902
@ -2079,7 +2079,8 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> {
|
||||
diag.span_suggestion(
|
||||
span,
|
||||
*msg,
|
||||
format!("{}.as_ref()", snippet),
|
||||
// HACK: fix issue# 100605, suggesting convert from &Option<T> to Option<&T>, remove the extra `&`
|
||||
format!("{}.as_ref()", snippet.trim_start_matches('&')),
|
||||
Applicability::MachineApplicable,
|
||||
);
|
||||
}
|
||||
|
9
src/test/ui/issues/issue-100605.rs
Normal file
9
src/test/ui/issues/issue-100605.rs
Normal file
@ -0,0 +1,9 @@
|
||||
fn takes_option(_arg: Option<&String>) {}
|
||||
|
||||
fn main() {
|
||||
takes_option(&None); //~ ERROR 4:18: 4:23: mismatched types [E0308]
|
||||
|
||||
let x = String::from("x");
|
||||
let res = Some(x);
|
||||
takes_option(&res); //~ ERROR 8:18: 8:22: mismatched types [E0308]
|
||||
}
|
46
src/test/ui/issues/issue-100605.stderr
Normal file
46
src/test/ui/issues/issue-100605.stderr
Normal file
@ -0,0 +1,46 @@
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-100605.rs:4:18
|
||||
|
|
||||
LL | takes_option(&None);
|
||||
| ------------ ^^^^^ expected enum `Option`, found `&Option<_>`
|
||||
| |
|
||||
| arguments to this function are incorrect
|
||||
|
|
||||
= note: expected enum `Option<&String>`
|
||||
found reference `&Option<_>`
|
||||
note: function defined here
|
||||
--> $DIR/issue-100605.rs:1:4
|
||||
|
|
||||
LL | fn takes_option(_arg: Option<&String>) {}
|
||||
| ^^^^^^^^^^^^ ---------------------
|
||||
help: you can convert from `&Option<T>` to `Option<&T>` using `.as_ref()`
|
||||
|
|
||||
LL | takes_option(None.as_ref());
|
||||
| ~~~~~~~~~~~~~
|
||||
help: consider removing the borrow
|
||||
|
|
||||
LL - takes_option(&None);
|
||||
LL + takes_option(None);
|
||||
|
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-100605.rs:8:18
|
||||
|
|
||||
LL | takes_option(&res);
|
||||
| ------------ ^^^^
|
||||
| | |
|
||||
| | expected enum `Option`, found `&Option<String>`
|
||||
| | help: you can convert from `&Option<T>` to `Option<&T>` using `.as_ref()`: `res.as_ref()`
|
||||
| arguments to this function are incorrect
|
||||
|
|
||||
= note: expected enum `Option<&String>`
|
||||
found reference `&Option<String>`
|
||||
note: function defined here
|
||||
--> $DIR/issue-100605.rs:1:4
|
||||
|
|
||||
LL | fn takes_option(_arg: Option<&String>) {}
|
||||
| ^^^^^^^^^^^^ ---------------------
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
Loading…
Reference in New Issue
Block a user