@@ -18,18 +18,22 @@ use std::collections::HashSet;
1818
1919#[ derive( Clone ) ]
2020pub struct SemanticClassServices {
21- class_member_references : ClassMemberReferences ,
21+ pub model : SemanticClassModel ,
2222}
2323
2424impl SemanticClassServices {
25- pub fn class_member_references ( & self ) -> & ClassMemberReferences {
26- & self . class_member_references
25+ pub fn model ( & self ) -> & SemanticClassModel {
26+ & self . model
2727 }
2828}
2929
3030#[ derive( Debug , Clone ) ]
31- pub struct SemanticClassModel {
32- pub references : ClassMemberReferences ,
31+ pub struct SemanticClassModel { }
32+
33+ impl SemanticClassModel {
34+ pub fn class_member_references ( & self , members : & JsClassMemberList ) -> ClassMemberReferences {
35+ class_member_references ( members)
36+ }
3337}
3438
3539impl FromServices for SemanticClassServices {
@@ -42,7 +46,7 @@ impl FromServices for SemanticClassServices {
4246 ServicesDiagnostic :: new ( rule_key. rule_name ( ) , & [ "SemanticClassModel" ] )
4347 } ) ?;
4448 Ok ( Self {
45- class_member_references : service. references . clone ( ) ,
49+ model : service. clone ( ) ,
4650 } )
4751 }
4852}
@@ -53,36 +57,25 @@ impl Phase for SemanticClassServices {
5357 }
5458}
5559
56- pub struct ClassMemberReferencesVisitor {
57- references : ClassMemberReferences ,
58- }
59-
60- impl ClassMemberReferencesVisitor {
61- pub ( crate ) fn new ( _root : & AnyJsRoot ) -> Self {
62- Self {
63- references : ClassMemberReferences :: default ( ) ,
64- }
65- }
66- }
60+ pub struct ClassMemberReferencesVisitor { }
6761
6862impl Visitor for ClassMemberReferencesVisitor {
6963 type Language = JsLanguage ;
7064
71- fn visit ( & mut self , event : & WalkEvent < JsSyntaxNode > , _ctx : VisitorContext < JsLanguage > ) {
65+ fn visit (
66+ & mut self ,
67+ event : & WalkEvent < JsSyntaxNode > ,
68+ mut ctx : VisitorContext < ' _ , ' _ , JsLanguage > ,
69+ ) {
7270 if let WalkEvent :: Enter ( node) = event
73- && let Some ( js_class_declaration ) = JsClassDeclaration :: cast_ref ( node)
71+ && JsClassDeclaration :: can_cast ( node. kind ( ) )
7472 {
75- let class_member_list = js_class_declaration. members ( ) ;
76- let refs = class_member_references ( & class_member_list) ;
77- self . references . reads . extend ( refs. reads ) ;
78- self . references . writes . extend ( refs. writes ) ;
73+ ctx. match_query ( node. clone ( ) ) ;
7974 }
8075 }
8176
8277 fn finish ( self : Box < Self > , ctx : VisitorFinishContext < JsLanguage > ) {
83- ctx. services . insert_service ( SemanticClassModel {
84- references : self . references ,
85- } ) ;
78+ ctx. services . insert_service ( SemanticClassModel { } ) ;
8679 }
8780}
8881
@@ -91,28 +84,10 @@ pub struct SemanticClass<N>(pub N);
9184
9285impl QueryMatch for SemanticClass < JsClassDeclaration > {
9386 fn text_range ( & self ) -> TextRange {
94- // return the text range of the class node
9587 self . 0 . syntax ( ) . text_trimmed_range ( )
9688 }
9789}
9890
99- struct SemanticClassVisitor ;
100-
101- impl Visitor for SemanticClassVisitor {
102- type Language = JsLanguage ;
103-
104- fn visit ( & mut self , event : & WalkEvent < JsSyntaxNode > , mut ctx : VisitorContext < JsLanguage > ) {
105- match event {
106- WalkEvent :: Enter ( node) => {
107- if JsClassDeclaration :: can_cast ( node. kind ( ) ) {
108- ctx. match_query ( node. clone ( ) ) ;
109- }
110- }
111- WalkEvent :: Leave ( _) => { }
112- } ;
113- }
114- }
115-
11691impl < N > Queryable for SemanticClass < N >
11792where
11893 N : AstNode < Language = JsLanguage > + ' static ,
12398 type Language = JsLanguage ;
12499 type Services = SemanticClassServices ;
125100
126- fn build_visitor ( analyzer : & mut impl AddVisitor < JsLanguage > , root : & AnyJsRoot ) {
127- analyzer. add_visitor ( Phases :: Syntax , || ClassMemberReferencesVisitor :: new ( root ) ) ;
128- analyzer. add_visitor ( Phases :: Semantic , || SemanticClassVisitor ) ;
101+ fn build_visitor ( analyzer : & mut impl AddVisitor < JsLanguage > , _root : & AnyJsRoot ) {
102+ analyzer. add_visitor ( Phases :: Syntax , || ClassMemberReferencesVisitor { } ) ;
103+ analyzer. add_visitor ( Phases :: Semantic , || ClassMemberReferencesVisitor { } ) ;
129104 }
130105
131106 fn key ( ) -> QueryKey < Self :: Language > {
0 commit comments