This commit is contained in:
Pramod Bisht 2018-09-09 12:05:46 +00:00
parent 05cb29e96f
commit a673203ec8
3 changed files with 59 additions and 1 deletions

View file

@ -4726,7 +4726,21 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
if receiver.ends_with(&method_call) {
None // do not suggest code that is already there (#53348)
} else {
Some(format!("{}{}", receiver, method_call))
// methods defined will be overwrite `.clone()`
// if suggesion is present in `method_call_list` (#53692)
let method_call_list = [".to_vec()", ".to_string()"];
if receiver.ends_with("clone()")
&& method_call_list.contains(&method_call.as_str()){
// needed to clone receiver, because we don't want other
// suggestion to get affect because of that
let mut new_receiver = receiver.clone();
let max_len = new_receiver.rfind(".").unwrap();
new_receiver.truncate(max_len);
Some(format!("{}{}", new_receiver, method_call))
}
else {
Some(format!("{}{}", receiver, method_call))
}
}
}) .collect::<Vec<_>>();
if !suggestions.is_empty() {

View file

@ -0,0 +1,17 @@
// Copyright 2018 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
fn main() {
let items = vec![1, 2, 3];
let ref_items: &[i32] = &items;
let items_clone: Vec<i32> = ref_items.clone();
let s = "hi";
let string: String = s.clone();
}

View file

@ -0,0 +1,27 @@
error[E0308]: mismatched types
--> $DIR/issue-53692.rs:13:37
|
LL | let items_clone: Vec<i32> = ref_items.clone();
| ^^^^^^^^^^^^^^^^^
| |
| expected struct `std::vec::Vec`, found &[i32]
| help: try using a conversion method: `ref_items.to_vec()`
|
= note: expected type `std::vec::Vec<i32>`
found type `&[i32]`
error[E0308]: mismatched types
--> $DIR/issue-53692.rs:16:30
|
LL | let string: String = s.clone();
| ^^^^^^^^^
| |
| expected struct `std::string::String`, found &str
| help: try using a conversion method: `s.to_string()`
|
= note: expected type `std::string::String`
found type `&str`
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0308`.