@@ -4,8 +4,8 @@ use arrayvec::ArrayVec;
44use ast:: HasName ;
55use cfg:: { CfgAtom , CfgExpr } ;
66use hir:: {
7- AsAssocItem , AttrsWithOwner , HasAttrs , HasCrate , HasSource , ModPath , Name , PathKind , Semantics ,
8- Symbol , db :: HirDatabase , sym,
7+ AsAssocItem , AttrsWithOwner , HasAttrs , HasCrate , HasSource , Semantics , Symbol , db :: HirDatabase ,
8+ sym,
99} ;
1010use ide_assists:: utils:: { has_test_related_attribute, test_related_attribute_syn} ;
1111use ide_db:: {
@@ -352,8 +352,7 @@ pub(crate) fn runnable_fn(
352352 . call_site ( ) ;
353353
354354 let file_range = fn_source. syntax ( ) . original_file_range_with_macro_call_input ( sema. db ) ;
355- let update_test =
356- UpdateTest :: find_snapshot_macro ( sema, & fn_source. file_syntax ( sema. db ) , file_range) ;
355+ let update_test = UpdateTest :: find_snapshot_macro ( sema, file_range) ;
357356
358357 let cfg = def. attrs ( sema. db ) . cfg ( ) ;
359358 Some ( Runnable { use_name_in_title : false , nav, kind, cfg, update_test } )
@@ -388,7 +387,7 @@ pub(crate) fn runnable_mod(
388387 file_id : module_source. file_id . original_file ( sema. db ) ,
389388 range : module_syntax. text_range ( ) ,
390389 } ;
391- let update_test = UpdateTest :: find_snapshot_macro ( sema, & module_syntax , file_range) ;
390+ let update_test = UpdateTest :: find_snapshot_macro ( sema, file_range) ;
392391
393392 Some ( Runnable {
394393 use_name_in_title : false ,
@@ -428,8 +427,7 @@ pub(crate) fn runnable_impl(
428427 let impl_source = sema. source ( * def) ?;
429428 let impl_syntax = impl_source. syntax ( ) ;
430429 let file_range = impl_syntax. original_file_range_with_macro_call_input ( sema. db ) ;
431- let update_test =
432- UpdateTest :: find_snapshot_macro ( sema, & impl_syntax. file_syntax ( sema. db ) , file_range) ;
430+ let update_test = UpdateTest :: find_snapshot_macro ( sema, file_range) ;
433431
434432 Some ( Runnable {
435433 use_name_in_title : false ,
@@ -475,7 +473,7 @@ fn runnable_mod_outline_definition(
475473 file_id : mod_source. file_id . original_file ( sema. db ) ,
476474 range : mod_syntax. text_range ( ) ,
477475 } ;
478- let update_test = UpdateTest :: find_snapshot_macro ( sema, & mod_syntax , file_range) ;
476+ let update_test = UpdateTest :: find_snapshot_macro ( sema, file_range) ;
479477
480478 Some ( Runnable {
481479 use_name_in_title : false ,
@@ -641,7 +639,7 @@ pub struct UpdateTest {
641639 pub snapbox : bool ,
642640}
643641
644- static SNAPSHOT_TEST_MACROS : OnceLock < FxHashMap < & str , Vec < ModPath > > > = OnceLock :: new ( ) ;
642+ static SNAPSHOT_TEST_MACROS : OnceLock < FxHashMap < & str , Vec < [ Symbol ; 2 ] > > > = OnceLock :: new ( ) ;
645643
646644impl UpdateTest {
647645 const EXPECT_CRATE : & str = "expect_test" ;
@@ -665,22 +663,17 @@ impl UpdateTest {
665663 const SNAPBOX_CRATE : & str = "snapbox" ;
666664 const SNAPBOX_MACROS : & [ & str ] = & [ "assert_data_eq" , "file" , "str" ] ;
667665
668- fn find_snapshot_macro (
669- sema : & Semantics < ' _ , RootDatabase > ,
670- scope : & SyntaxNode ,
671- file_range : hir:: FileRange ,
672- ) -> Self {
666+ fn find_snapshot_macro ( sema : & Semantics < ' _ , RootDatabase > , file_range : hir:: FileRange ) -> Self {
673667 fn init < ' a > (
674668 krate_name : & ' a str ,
675669 paths : & [ & str ] ,
676- map : & mut FxHashMap < & ' a str , Vec < ModPath > > ,
670+ map : & mut FxHashMap < & ' a str , Vec < [ Symbol ; 2 ] > > ,
677671 ) {
678672 let mut res = Vec :: with_capacity ( paths. len ( ) ) ;
679- let krate = Name :: new_symbol_root ( Symbol :: intern ( krate_name) ) ;
673+ let krate = Symbol :: intern ( krate_name) ;
680674 for path in paths {
681- let segments = [ krate. clone ( ) , Name :: new_symbol_root ( Symbol :: intern ( path) ) ] ;
682- let mod_path = ModPath :: from_segments ( PathKind :: Abs , segments) ;
683- res. push ( mod_path) ;
675+ let segments = [ krate. clone ( ) , Symbol :: intern ( path) ] ;
676+ res. push ( segments) ;
684677 }
685678 map. insert ( krate_name, res) ;
686679 }
@@ -694,11 +687,9 @@ impl UpdateTest {
694687 } ) ;
695688
696689 let search_scope = SearchScope :: file_range ( file_range) ;
697- let find_macro = |paths : & [ ModPath ] | {
690+ let find_macro = |paths : & [ [ Symbol ; 2 ] ] | {
698691 for path in paths {
699- let Some ( items) = sema. resolve_mod_path ( scope, path) else {
700- continue ;
701- } ;
692+ let items = hir:: resolve_absolute_path ( sema. db , path. iter ( ) . cloned ( ) ) ;
702693 for item in items {
703694 if let hir:: ItemInNs :: Macros ( makro) = item
704695 && Definition :: Macro ( makro)
0 commit comments