Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/generate_mut_trait_impl.rs')
-rw-r--r--crates/ide-assists/src/handlers/generate_mut_trait_impl.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs b/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs
index 4ddab2cfad..dc26ec79a7 100644
--- a/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs
+++ b/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs
@@ -134,6 +134,9 @@ fn get_trait_mut(apply_trait: &hir::Trait, famous: FamousDefs<'_, '_>) -> Option
if trait_ == famous.core_borrow_Borrow().as_ref() {
return Some("BorrowMut");
}
+ if trait_ == famous.core_ops_Deref().as_ref() {
+ return Some("DerefMut");
+ }
None
}
@@ -142,6 +145,7 @@ fn process_method_name(name: ast::Name) -> Option<(ast::Name, &'static str)> {
"index" => "index_mut",
"as_ref" => "as_mut",
"borrow" => "borrow_mut",
+ "deref" => "deref_mut",
_ => return None,
};
Some((name, new_name))
@@ -260,6 +264,39 @@ impl core::convert::AsRef<i32> for Foo {
}
"#,
);
+
+ check_assist(
+ generate_mut_trait_impl,
+ r#"
+//- minicore: deref
+struct Foo(i32);
+
+impl core::ops::Deref$0 for Foo {
+ type Target = i32;
+
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+"#,
+ r#"
+struct Foo(i32);
+
+$0impl core::ops::DerefMut for Foo {
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ &mut self.0
+ }
+}
+
+impl core::ops::Deref for Foo {
+ type Target = i32;
+
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+"#,
+ );
}
#[test]