about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYoung-Flash <dongyang@apache.org>2024-01-18 17:43:15 +0800
committerYoung-Flash <dongyang@apache.org>2024-01-18 17:43:15 +0800
commitbd264031309fa2abc89851f95ca5cba6d15181cc (patch)
treede9993527ee6cad87e73a696b7ed9ca930ca0e27
parentae6e73772432cfe35bb0ff6de6fdcfa908642b67 (diff)
downloadrust-bd264031309fa2abc89851f95ca5cba6d15181cc.tar.gz
rust-bd264031309fa2abc89851f95ca5cba6d15181cc.zip
fix panic with reference in macro
-rw-r--r--crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs8
1 files changed, 8 insertions, 0 deletions
diff --git a/crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs b/crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs
index 65e2a018477..4961e05e2f7 100644
--- a/crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs
+++ b/crates/ide-assists/src/handlers/extract_struct_from_enum_variant.rs
@@ -412,6 +412,14 @@ fn reference_to_node(
 ) -> Option<(ast::PathSegment, SyntaxNode, hir::Module)> {
     let segment =
         reference.name.as_name_ref()?.syntax().parent().and_then(ast::PathSegment::cast)?;
+
+    // filter out the reference in marco
+    let s_range = segment.syntax().text_range();
+    let origin_range = sema.original_range(segment.syntax()).range;
+    if s_range != origin_range {
+        return None;
+    }
+
     let parent = segment.parent_path().syntax().parent()?;
     let expr_or_pat = match_ast! {
         match parent {