aboutsummaryrefslogtreecommitdiff
path: root/crates/ide_assists/src/handlers/extract_type_alias.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ide_assists/src/handlers/extract_type_alias.rs')
-rw-r--r--crates/ide_assists/src/handlers/extract_type_alias.rs28
1 files changed, 3 insertions, 25 deletions
diff --git a/crates/ide_assists/src/handlers/extract_type_alias.rs b/crates/ide_assists/src/handlers/extract_type_alias.rs
index 171b87918..f75d35462 100644
--- a/crates/ide_assists/src/handlers/extract_type_alias.rs
+++ b/crates/ide_assists/src/handlers/extract_type_alias.rs
@@ -1,7 +1,4 @@
1use syntax::{ 1use syntax::ast::{self, AstNode};
2 ast::{self, AstNode},
3 SyntaxKind,
4};
5 2
6use crate::{AssistContext, AssistId, AssistKind, Assists}; 3use crate::{AssistContext, AssistId, AssistKind, Assists};
7 4
@@ -27,28 +24,9 @@ pub(crate) fn extract_type_alias(acc: &mut Assists, ctx: &AssistContext) -> Opti
27 return None; 24 return None;
28 } 25 }
29 26
30 let node = match ctx.covering_element() { 27 let node = ctx.find_node_at_range::<ast::Type>()?;
31 syntax::NodeOrToken::Node(node) => node,
32 syntax::NodeOrToken::Token(tok) => tok.parent()?,
33 };
34 let range = node.text_range();
35 let mut type_like_node = None;
36 for node in node.ancestors() {
37 if node.text_range() != range {
38 break;
39 }
40
41 let kind = node.kind();
42 if ast::Type::can_cast(kind) || kind == SyntaxKind::TYPE_ARG {
43 type_like_node = Some(node);
44 break;
45 }
46 }
47
48 let node = type_like_node?;
49
50 let insert = ctx.find_node_at_offset::<ast::Item>()?.syntax().text_range().start(); 28 let insert = ctx.find_node_at_offset::<ast::Item>()?.syntax().text_range().start();
51 let target = node.text_range(); 29 let target = node.syntax().text_range();
52 30
53 acc.add( 31 acc.add(
54 AssistId("extract_type_alias", AssistKind::RefactorExtract), 32 AssistId("extract_type_alias", AssistKind::RefactorExtract),