Skip to content

Commit 8c10924

Browse files
Use find_node_at_range
1 parent e6580aa commit 8c10924

File tree

2 files changed

+7
-26
lines changed

2 files changed

+7
-26
lines changed

crates/ide_assists/src/assist_context.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use ide_db::{
1313
RootDatabase,
1414
};
1515
use syntax::{
16-
algo::{self, find_node_at_offset, SyntaxRewriter},
16+
algo::{self, find_node_at_offset, find_node_at_range, SyntaxRewriter},
1717
AstNode, AstToken, SourceFile, SyntaxElement, SyntaxKind, SyntaxNode, SyntaxNodePtr,
1818
SyntaxToken, TextRange, TextSize, TokenAtOffset,
1919
};
@@ -89,6 +89,9 @@ impl<'a> AssistContext<'a> {
8989
pub(crate) fn find_node_at_offset<N: AstNode>(&self) -> Option<N> {
9090
find_node_at_offset(self.source_file.syntax(), self.offset())
9191
}
92+
pub(crate) fn find_node_at_range<N: AstNode>(&self) -> Option<N> {
93+
find_node_at_range(self.source_file.syntax(), self.frange.range)
94+
}
9295
pub(crate) fn find_node_at_offset_with_descend<N: AstNode>(&self) -> Option<N> {
9396
self.sema.find_node_at_offset_with_descend(self.source_file.syntax(), self.offset())
9497
}

crates/ide_assists/src/handlers/extract_type_alias.rs

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
use syntax::{
2-
ast::{self, AstNode},
3-
SyntaxKind,
4-
};
1+
use syntax::ast::{self, AstNode};
52

63
use crate::{AssistContext, AssistId, AssistKind, Assists};
74

@@ -27,28 +24,9 @@ pub(crate) fn extract_type_alias(acc: &mut Assists, ctx: &AssistContext) -> Opti
2724
return None;
2825
}
2926

30-
let node = match ctx.covering_element() {
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-
27+
let node = ctx.find_node_at_range::<ast::Type>()?;
5028
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();
5230

5331
acc.add(
5432
AssistId("extract_type_alias", AssistKind::RefactorExtract),

0 commit comments

Comments
 (0)