diff options
| author | Jonas Schievink <jonas.schievink@ferrous-systems.com> | 2023-01-27 16:51:55 +0100 |
|---|---|---|
| committer | Jonas Schievink <jonas.schievink@ferrous-systems.com> | 2023-01-27 16:51:55 +0100 |
| commit | e7a2d13ff63c6b16f70f7854a9225de7301e044c (patch) | |
| tree | 990db9cac535c13c2a3e638de5a7f295a5e4a490 | |
| parent | 0063e894695aa627e582c7be0b86fcab52f0ee06 (diff) | |
| download | rust-e7a2d13ff63c6b16f70f7854a9225de7301e044c.tar.gz rust-e7a2d13ff63c6b16f70f7854a9225de7301e044c.zip | |
Fix "add missing impl members" assist for impls inside blocks
| -rw-r--r-- | crates/ide-assists/src/handlers/add_missing_impl_members.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/crates/ide-assists/src/handlers/add_missing_impl_members.rs b/crates/ide-assists/src/handlers/add_missing_impl_members.rs index 627a9852fc8..4e11b31deb0 100644 --- a/crates/ide-assists/src/handlers/add_missing_impl_members.rs +++ b/crates/ide-assists/src/handlers/add_missing_impl_members.rs @@ -109,6 +109,7 @@ fn add_missing_impl_members_inner( if ctx.token_at_offset().all(|t| { t.parent_ancestors() + .take_while(|node| node != impl_def.syntax()) .any(|s| ast::BlockExpr::can_cast(s.kind()) || ast::ParamList::can_cast(s.kind())) }) { return None; @@ -1486,4 +1487,35 @@ impl Trait for () { }"#, ) } + + #[test] + fn test_works_inside_function() { + check_assist( + add_missing_impl_members, + r#" +trait Tr { + fn method(); +} +fn main() { + struct S; + impl Tr for S { + $0 + } +} +"#, + r#" +trait Tr { + fn method(); +} +fn main() { + struct S; + impl Tr for S { + fn method() { + ${0:todo!()} + } + } +} +"#, + ); + } } |
