diff options
| author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2021-06-02 15:21:17 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-02 15:21:17 +0000 |
| commit | 2022cfce44f7c3d82dd354abeb2d40b570fa3ef4 (patch) | |
| tree | 2be11f2d6a4f1434c7e4b22290ce9922dde21760 | |
| parent | 9d7343719ded81805b977000b4ad805458fe69c8 (diff) | |
| parent | 66a5fd375a60ec98c35acd9b4d5b03c6057aa36c (diff) | |
| download | rust-2022cfce44f7c3d82dd354abeb2d40b570fa3ef4.tar.gz rust-2022cfce44f7c3d82dd354abeb2d40b570fa3ef4.zip | |
Merge #9111
9111: fix: make "extract type alias" place extracted type alias outside of impl r=jonas-schievink a=jonas-schievink bors r+ Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
| -rw-r--r-- | crates/ide_assists/src/handlers/extract_type_alias.rs | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/crates/ide_assists/src/handlers/extract_type_alias.rs b/crates/ide_assists/src/handlers/extract_type_alias.rs index 442a209b976..998e0de7b76 100644 --- a/crates/ide_assists/src/handlers/extract_type_alias.rs +++ b/crates/ide_assists/src/handlers/extract_type_alias.rs @@ -25,7 +25,12 @@ pub(crate) fn extract_type_alias(acc: &mut Assists, ctx: &AssistContext) -> Opti } let node = ctx.find_node_at_range::<ast::Type>()?; - let insert = ctx.find_node_at_offset::<ast::Item>()?.syntax().text_range().start(); + let insert = ctx + .find_node_at_offset::<ast::Impl>() + .map(|imp| imp.syntax().clone()) + .or_else(|| ctx.find_node_at_offset::<ast::Item>().map(|item| item.syntax().clone()))? + .text_range() + .start(); let target = node.syntax().text_range(); acc.add( @@ -146,4 +151,25 @@ struct S { "#, ); } + + #[test] + fn extract_from_impl() { + // When invoked in an impl, extracted type alias should be placed next to the impl, not + // inside. + check_assist( + extract_type_alias, + r#" +impl S { + fn f() -> $0(u8, u8)$0 {} +} + "#, + r#" +type $0Type = (u8, u8); + +impl S { + fn f() -> Type {} +} + "#, + ); + } } |
