Fixed issue with self: &Box<Self>

This commit is contained in:
Duddino 2020-04-16 14:04:12 +02:00
parent ad105ef9a4
commit f36f78f571
3 changed files with 13 additions and 5 deletions

View File

@ -2260,13 +2260,19 @@ fn fn_sig_suggestion(
.map(|(i, ty)| {
Some(match ty.kind {
ty::Param(_) if assoc.fn_has_self_parameter && i == 0 => "self".to_string(),
ty::Ref(reg, _ref_ty, mutability) => {
ty::Ref(reg, ref_ty, mutability) if i == 0 => {
let reg = match &format!("{}", reg)[..] {
"'_" | "" => String::new(),
reg => format!("{} ", reg),
};
if assoc.fn_has_self_parameter && i == 0 {
format!("&{}{}self", reg, mutability.prefix_str())
if assoc.fn_has_self_parameter {
match ref_ty.kind {
ty::Param(param) if param.name == kw::SelfUpper => {
format!("&{}{}self", reg, mutability.prefix_str())
}
_ => format!("self: {}", ty),
}
} else {
format!("_: {:?}", ty)
}

View File

@ -5,4 +5,5 @@ pub trait X {
fn method2(self: Box<Self>, s: String) -> Self::Type;
fn method3(other: &Self, s: String) -> Self::Type;
fn method4(&self, other: &Self) -> Self::Type;
fn method5(self: &Box<Self>) -> Self::Type;
}

View File

@ -1,8 +1,8 @@
error[E0046]: not all trait items implemented, missing: `CONSTANT`, `Type`, `method`, `method2`, `method3`, `method4`
error[E0046]: not all trait items implemented, missing: `CONSTANT`, `Type`, `method`, `method2`, `method3`, `method4`, `method5`
--> $DIR/m2.rs:9:1
|
LL | impl m1::X for X {
| ^^^^^^^^^^^^^^^^ missing `CONSTANT`, `Type`, `method`, `method2`, `method3`, `method4` in implementation
| ^^^^^^^^^^^^^^^^ missing `CONSTANT`, `Type`, `method`, `method2`, `method3`, `method4`, `method5` in implementation
|
= help: implement the missing item: `const CONSTANT: u32 = 42;`
= help: implement the missing item: `type Type = Type;`
@ -10,6 +10,7 @@ LL | impl m1::X for X {
= help: implement the missing item: `fn method2(self: std::boxed::Box<Self>, _: std::string::String) -> <Self as m1::X>::Type { todo!() }`
= help: implement the missing item: `fn method3(_: &Self, _: std::string::String) -> <Self as m1::X>::Type { todo!() }`
= help: implement the missing item: `fn method4(&self, _: &Self) -> <Self as m1::X>::Type { todo!() }`
= help: implement the missing item: `fn method5(self: &std::boxed::Box<Self>) -> <Self as m1::X>::Type { todo!() }`
error: aborting due to previous error