@@ -119,7 +119,27 @@ def visit_class_node(node)
119119
120120 class_decl = AST ::Ruby ::Declarations ::ClassDecl . new ( buffer , class_name , node , super_class )
121121 insert_declaration ( class_decl )
122- push_module_nesting ( class_decl ) do
122+ visit_class_or_module_body ( class_decl , node )
123+ end
124+
125+ def visit_module_node ( node )
126+ return if skip_node? ( node )
127+
128+ unless module_name = constant_as_type_name ( node . constant_path )
129+ diagnostics << Diagnostic ::NonConstantModuleName . new (
130+ rbs_location ( node . constant_path . location ) ,
131+ "Module name must be a constant"
132+ )
133+ return
134+ end
135+
136+ module_decl = AST ::Ruby ::Declarations ::ModuleDecl . new ( buffer , module_name , node )
137+ insert_declaration ( module_decl )
138+ visit_class_or_module_body ( module_decl , node )
139+ end
140+
141+ def visit_class_or_module_body ( decl , node )
142+ push_module_nesting ( decl ) do
123143 visit_child_nodes ( node )
124144
125145 node . child_nodes . each do |child_node |
@@ -137,7 +157,7 @@ def visit_class_node(node)
137157 block . each_paragraph ( [ ] ) do |paragraph |
138158 case paragraph
139159 when AST ::Ruby ::Annotations ::InstanceVariableAnnotation
140- class_decl . members << AST ::Ruby ::Members ::InstanceVariableMember . new ( buffer , paragraph )
160+ decl . members << AST ::Ruby ::Members ::InstanceVariableMember . new ( buffer , paragraph )
141161 when Location
142162 # Skip
143163 when AST ::Ruby ::CommentBlock ::AnnotationSyntaxError
@@ -150,29 +170,7 @@ def visit_class_node(node)
150170 report_unused_annotation ( *unused_annotations )
151171 end
152172
153- class_decl . members . sort_by! { _1 . location . start_line }
154- end
155-
156- def visit_module_node ( node )
157- return if skip_node? ( node )
158-
159- unless module_name = constant_as_type_name ( node . constant_path )
160- diagnostics << Diagnostic ::NonConstantModuleName . new (
161- rbs_location ( node . constant_path . location ) ,
162- "Module name must be a constant"
163- )
164- return
165- end
166-
167- module_decl = AST ::Ruby ::Declarations ::ModuleDecl . new ( buffer , module_name , node )
168- insert_declaration ( module_decl )
169- push_module_nesting ( module_decl ) do
170- visit_child_nodes ( node )
171- end
172-
173- comments . each_enclosed_block ( node ) do |block |
174- report_unused_block ( block )
175- end
173+ decl . members . sort_by! { _1 . location . start_line }
176174 end
177175
178176 def visit_def_node ( node )
0 commit comments