From 6fb908cbb73e7c8f46b1eeecc5a14fa8eb3508c5 Mon Sep 17 00:00:00 2001 From: A4-Tacks Date: Sun, 19 Oct 2025 17:11:12 +0800 Subject: [PATCH] Fix extract method in trait outside the trait Example --- ```rust trait Foo { fn f(&self) -> i32; fn foo(&self) -> i32 { $0self.f()+self.f()$0 } } ``` **Before this PR**: ```rust trait Foo { fn f(&self) -> i32; fn foo(&self) -> i32 { self.fun_name() } } fn $0fun_name(&self) -> i32 { self.f()+self.f() } ``` **After this PR**: ```rust trait Foo { fn f(&self) -> i32; fn foo(&self) -> i32 { self.fun_name() } fn $0fun_name(&self) -> i32 { self.f()+self.f() } } ``` --- .../src/handlers/extract_function.rs | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/crates/ide-assists/src/handlers/extract_function.rs b/crates/ide-assists/src/handlers/extract_function.rs index 9a9adf26a6df..372d34e92993 100644 --- a/crates/ide-assists/src/handlers/extract_function.rs +++ b/crates/ide-assists/src/handlers/extract_function.rs @@ -1410,6 +1410,9 @@ fn node_to_insert_after(body: &FunctionBody, anchor: Anchor) -> Option (), } @@ -2971,6 +2974,35 @@ impl S { ); } + #[test] + fn method_in_trait() { + check_assist( + extract_function, + r#" +trait Foo { + fn f(&self) -> i32; + + fn foo(&self) -> i32 { + $0self.f()+self.f()$0 + } +} +"#, + r#" +trait Foo { + fn f(&self) -> i32; + + fn foo(&self) -> i32 { + self.fun_name() + } + + fn $0fun_name(&self) -> i32 { + self.f()+self.f() + } +} +"#, + ); + } + #[test] fn variable_defined_inside_and_used_after_no_ret() { check_assist(