From 824df43d2d66f038354160450b38bbcc822e0b4a Mon Sep 17 00:00:00 2001 From: Ali Bektas Date: Sun, 9 Mar 2025 18:47:40 +0100 Subject: [PATCH] Observe unsafeness only for replace_derive_with_manual_impl --- .../src/handlers/add_missing_impl_members.rs | 29 ------------------- .../replace_derive_with_manual_impl.rs | 6 +++- crates/ide-assists/src/utils.rs | 5 +--- 3 files changed, 6 insertions(+), 34 deletions(-) diff --git a/crates/ide-assists/src/handlers/add_missing_impl_members.rs b/crates/ide-assists/src/handlers/add_missing_impl_members.rs index ef538c17ce..6b8a877756 100644 --- a/crates/ide-assists/src/handlers/add_missing_impl_members.rs +++ b/crates/ide-assists/src/handlers/add_missing_impl_members.rs @@ -2363,33 +2363,4 @@ impl other_file_2::Trait for MyStruct { }"#, ); } - - #[test] - fn unsafeness_observed() { - check_assist( - add_missing_impl_members, - r#" -unsafe trait UnsafeTrait { - unsafe fn unsafe_fn(); -} - -struct A {} - -impl Uns$0afeTrait for A {} - "#, - r#" -unsafe trait UnsafeTrait { - unsafe fn unsafe_fn(); -} - -struct A {} - -unsafe impl UnsafeTrait for A { - unsafe fn unsafe_fn() { - ${0:todo!()} - } -} - "#, - ); - } } diff --git a/crates/ide-assists/src/handlers/replace_derive_with_manual_impl.rs b/crates/ide-assists/src/handlers/replace_derive_with_manual_impl.rs index 7696a14a4f..8ff9fe09b5 100644 --- a/crates/ide-assists/src/handlers/replace_derive_with_manual_impl.rs +++ b/crates/ide-assists/src/handlers/replace_derive_with_manual_impl.rs @@ -5,7 +5,7 @@ use syntax::{ SyntaxKind::WHITESPACE, T, ast::{self, AstNode, HasName, make}, - ted, + ted::{self, Position}, }; use crate::{ @@ -223,6 +223,10 @@ fn impl_def_from_trait( let first_assoc_item = add_trait_assoc_items_to_impl(sema, &trait_items, trait_, &impl_def, &target_scope); + if trait_.is_unsafe(sema.db) { + ted::insert(Position::first_child_of(impl_def.syntax()), make::token(T![unsafe])); + } + // Generate a default `impl` function body for the derived trait. if let ast::AssocItem::Fn(ref func) = first_assoc_item { let _ = gen_trait_fn_body(func, trait_path, adt, None); diff --git a/crates/ide-assists/src/utils.rs b/crates/ide-assists/src/utils.rs index 31924773b4..8b81c920ec 100644 --- a/crates/ide-assists/src/utils.rs +++ b/crates/ide-assists/src/utils.rs @@ -24,7 +24,7 @@ use syntax::{ make, syntax_factory::SyntaxFactory, }, - ted::{self, Position}, + ted, }; use crate::assist_context::{AssistContext, SourceChangeBuilder}; @@ -212,9 +212,6 @@ pub fn add_trait_assoc_items_to_impl( }); let assoc_item_list = impl_.get_or_create_assoc_item_list(); - if trait_.is_unsafe(sema.db) { - ted::insert(Position::first_child_of(impl_.syntax()), make::token(T![unsafe])); - } let mut first_item = None; for item in items {