@@ -485,8 +485,8 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
485
485
}
486
486
487
487
/// Returns `true` if the `node` is inside an `unsafe` context.
488
- pub fn is_inside_unsafe ( & self , node : & SyntaxNode ) -> bool {
489
- self . imp . is_inside_unsafe ( node )
488
+ pub fn is_inside_unsafe ( & self , expr : & ast :: Expr ) -> bool {
489
+ self . imp . is_inside_unsafe ( expr )
490
490
}
491
491
}
492
492
@@ -1471,17 +1471,18 @@ impl<'db> SemanticsImpl<'db> {
1471
1471
. unwrap_or ( false )
1472
1472
}
1473
1473
1474
- fn is_inside_unsafe ( & self , node : & SyntaxNode ) -> bool {
1474
+ fn is_inside_unsafe ( & self , expr : & ast :: Expr ) -> bool {
1475
1475
let item_or_variant = |ancestor : SyntaxNode | {
1476
1476
if ast:: Item :: can_cast ( ancestor. kind ( ) ) {
1477
1477
ast:: Item :: cast ( ancestor) . map ( Either :: Left )
1478
1478
} else {
1479
1479
ast:: Variant :: cast ( ancestor) . map ( Either :: Right )
1480
1480
}
1481
1481
} ;
1482
- let Some ( enclosing_item) = node . ancestors ( ) . find_map ( item_or_variant) else { return false } ;
1482
+ let Some ( enclosing_item) = expr . syntax ( ) . ancestors ( ) . find_map ( item_or_variant) else { return false } ;
1483
1483
1484
1484
let def = match & enclosing_item {
1485
+ Either :: Left ( ast:: Item :: Fn ( it) ) if it. unsafe_token ( ) . is_some ( ) => return true ,
1485
1486
Either :: Left ( ast:: Item :: Fn ( it) ) => {
1486
1487
self . to_def ( it) . map ( <_ >:: into) . map ( DefWithBodyId :: FunctionId )
1487
1488
}
@@ -1497,15 +1498,11 @@ impl<'db> SemanticsImpl<'db> {
1497
1498
let Some ( def) = def else { return false } ;
1498
1499
let enclosing_node = enclosing_item. as_ref ( ) . either ( |i| i. syntax ( ) , |v| v. syntax ( ) ) ;
1499
1500
1500
- if ast:: Fn :: cast ( enclosing_node. clone ( ) ) . and_then ( |f| f. unsafe_token ( ) ) . is_some ( ) {
1501
- return true ;
1502
- }
1503
-
1504
1501
let ( body, source_map) = self . db . body_with_source_map ( def) ;
1505
1502
1506
- let file_id = self . find_file ( node ) . file_id ;
1503
+ let file_id = self . find_file ( expr . syntax ( ) ) . file_id ;
1507
1504
1508
- let Some ( mut parent) = node . parent ( ) else { return false } ;
1505
+ let Some ( mut parent) = expr . syntax ( ) . parent ( ) else { return false } ;
1509
1506
loop {
1510
1507
if & parent == enclosing_node {
1511
1508
break false ;
0 commit comments