@@ -15,10 +15,7 @@ use memchr::memmem::Finder;
15
15
use nohash_hasher:: IntMap ;
16
16
use once_cell:: unsync:: Lazy ;
17
17
use parser:: SyntaxKind ;
18
- use syntax:: {
19
- ast:: { self , HasAttrs as _} ,
20
- match_ast, AstNode , AstToken , SyntaxElement , TextRange , TextSize ,
21
- } ;
18
+ use syntax:: { ast, match_ast, AstNode , AstToken , SyntaxElement , TextRange , TextSize } ;
22
19
use triomphe:: Arc ;
23
20
24
21
use crate :: {
@@ -747,7 +744,7 @@ impl<'a> FindUsages<'a> {
747
744
let reference = FileReference {
748
745
range,
749
746
name : FileReferenceNode :: NameRef ( name_ref. clone ( ) ) ,
750
- category : ReferenceCategory :: new ( & def, name_ref) ,
747
+ category : ReferenceCategory :: new ( self . sema , & def, name_ref) ,
751
748
} ;
752
749
sink ( file_id, reference)
753
750
}
@@ -763,7 +760,7 @@ impl<'a> FindUsages<'a> {
763
760
let reference = FileReference {
764
761
range,
765
762
name : FileReferenceNode :: NameRef ( name_ref. clone ( ) ) ,
766
- category : ReferenceCategory :: new ( & def, name_ref) ,
763
+ category : ReferenceCategory :: new ( self . sema , & def, name_ref) ,
767
764
} ;
768
765
sink ( file_id, reference)
769
766
}
@@ -773,7 +770,7 @@ impl<'a> FindUsages<'a> {
773
770
let reference = FileReference {
774
771
range,
775
772
name : FileReferenceNode :: NameRef ( name_ref. clone ( ) ) ,
776
- category : ReferenceCategory :: new ( & def, name_ref) ,
773
+ category : ReferenceCategory :: new ( self . sema , & def, name_ref) ,
777
774
} ;
778
775
sink ( file_id, reference)
779
776
} else {
@@ -787,10 +784,10 @@ impl<'a> FindUsages<'a> {
787
784
let local = Definition :: Local ( local) ;
788
785
let access = match self . def {
789
786
Definition :: Field ( _) if field == self . def => {
790
- ReferenceCategory :: new ( & field, name_ref)
787
+ ReferenceCategory :: new ( self . sema , & field, name_ref)
791
788
}
792
789
Definition :: Local ( _) if local == self . def => {
793
- ReferenceCategory :: new ( & local, name_ref)
790
+ ReferenceCategory :: new ( self . sema , & local, name_ref)
794
791
}
795
792
_ => return false ,
796
793
} ;
@@ -875,8 +872,12 @@ fn def_to_ty(sema: &Semantics<'_, RootDatabase>, def: &Definition) -> Option<hir
875
872
}
876
873
877
874
impl ReferenceCategory {
878
- fn new ( def : & Definition , r : & ast:: NameRef ) -> Option < ReferenceCategory > {
879
- if is_name_ref_in_test ( r) {
875
+ fn new (
876
+ sema : & Semantics < ' _ , RootDatabase > ,
877
+ def : & Definition ,
878
+ r : & ast:: NameRef ,
879
+ ) -> Option < ReferenceCategory > {
880
+ if is_name_ref_in_test ( sema, r) {
880
881
return Some ( ReferenceCategory :: Test ) ;
881
882
}
882
883
@@ -919,29 +920,9 @@ fn is_name_ref_in_import(name_ref: &ast::NameRef) -> bool {
919
920
. map_or ( false , |it| it. kind ( ) == SyntaxKind :: USE_TREE )
920
921
}
921
922
922
- fn is_name_ref_in_test ( name_ref : & ast:: NameRef ) -> bool {
923
- let mode = name_ref. syntax ( ) . ancestors ( ) . find_map ( |node| {
924
- match_ast ! {
925
- match node {
926
- ast:: Fn ( f) => {
927
- let attrs = f. attrs( ) ;
928
- let mut is_test = false ;
929
- for attr in attrs {
930
- if attr. to_string( ) == "#[test]" {
931
- is_test = true ;
932
- break ;
933
- }
934
- }
935
- if is_test {
936
- Some ( ReferenceCategory :: Test )
937
- }
938
- else {
939
- None
940
- }
941
- } ,
942
- _ => None
943
- }
944
- }
945
- } ) ;
946
- mode. is_some ( )
923
+ fn is_name_ref_in_test ( sema : & Semantics < ' _ , RootDatabase > , name_ref : & ast:: NameRef ) -> bool {
924
+ name_ref. syntax ( ) . ancestors ( ) . any ( |node| match ast:: Fn :: cast ( node) {
925
+ Some ( it) => sema. to_def ( & it) . map_or ( false , |func| func. is_test ( sema. db ) ) ,
926
+ None => false ,
927
+ } )
947
928
}
0 commit comments