diff options
| author | Shoyu Vanilla (Flint) <modulo641@gmail.com> | 2025-07-21 04:31:24 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-21 04:31:24 +0000 |
| commit | 4bbe74bb6cabb1f30775081254614ccda6985d8a (patch) | |
| tree | f1cd69b5b5e6013b8b1c43626e0ebe7d238e5ddd | |
| parent | 33d62b5fbad2a9075a1ce5f296021896cdc04cad (diff) | |
| parent | 54d974324c9770b9368194ca3c916fb5a5b6c9a4 (diff) | |
| download | rust-4bbe74bb6cabb1f30775081254614ccda6985d8a.tar.gz rust-4bbe74bb6cabb1f30775081254614ccda6985d8a.zip | |
Merge pull request #20256 from A4-Tacks/gen-mut-trait-deref
Add Deref -> DerefMut for generate_mut_trait_impl
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs b/src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs index 4ddab2cfad0..dc26ec79a74 100644 --- a/src/tools/rust-analyzer/crates/ide-assists/src/handlers/generate_mut_trait_impl.rs +++ b/src/tools/rust-analyzer/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] |
