about summary refs log tree commit diff
diff options
context:
space:
mode:
authorTiddo Langerak <tiddolangerak@gmail.com>2022-08-10 17:03:15 +0300
committerTiddo Langerak <tiddolangerak@gmail.com>2022-08-10 17:03:15 +0300
commit7402366877b3f50563cba4ba919cdc88c6220d14 (patch)
tree11147f747a7b92eba49f7c29faf96bcc1f3eb77e
parent7c568961fd0e1d4ccce04797acfbb07e5f30b551 (diff)
downloadrust-7402366877b3f50563cba4ba919cdc88c6220d14.tar.gz
rust-7402366877b3f50563cba4ba919cdc88c6220d14.zip
Avoid cloning IMPL node if we don't have to
-rw-r--r--crates/ide-assists/src/handlers/extract_function.rs6
1 files changed, 6 insertions, 0 deletions
diff --git a/crates/ide-assists/src/handlers/extract_function.rs b/crates/ide-assists/src/handlers/extract_function.rs
index 40d0327ef71..969b0c1fb3f 100644
--- a/crates/ide-assists/src/handlers/extract_function.rs
+++ b/crates/ide-assists/src/handlers/extract_function.rs
@@ -1288,6 +1288,9 @@ fn last_impl_member(impl_node: &SyntaxNode) -> Option<SyntaxNode> {
 }
 
 fn is_trait_impl(node: &SyntaxNode) -> bool {
+    if !ast::Impl::can_cast(node.kind()) {
+        return false;
+    }
     match ast::Impl::cast(node.clone()) {
         Some(c) => c.trait_().is_some(),
         None => false,
@@ -1295,6 +1298,9 @@ fn is_trait_impl(node: &SyntaxNode) -> bool {
 }
 
 fn impl_type_name(impl_node: &SyntaxNode) -> Option<String> {
+    if !ast::Impl::can_cast(impl_node.kind()) {
+        return None;
+    }
     Some(ast::Impl::cast(impl_node.clone())?.self_ty()?.to_string())
 }