@@ -17,6 +17,7 @@ use gluon::{
17
17
base:: {
18
18
ast:: { Expr , Pattern , SpannedExpr } ,
19
19
filename_to_module,
20
+ metadata:: BaseMetadata ,
20
21
symbol:: Symbol ,
21
22
types:: { ArcType , Type } ,
22
23
} ,
@@ -263,6 +264,18 @@ fn gather_doc_tests(expr: &SpannedExpr<Symbol>) -> Vec<(String, String)> {
263
264
}
264
265
265
266
struct DocVisitor ( Vec < ( String , String ) > ) ;
267
+
268
+ impl DocVisitor {
269
+ fn make_test_from_metadata ( & mut self , name : & str , metadata : & BaseMetadata < ' _ > ) {
270
+ if let Some ( comment) = & metadata. comment ( ) {
271
+ let source = make_test ( & comment. content ) ;
272
+ if !source. is_empty ( ) {
273
+ self . 0 . push ( ( format ! ( "{}" , name) , String :: from ( source) ) ) ;
274
+ }
275
+ }
276
+ }
277
+ }
278
+
266
279
impl Visitor < ' _ , ' _ > for DocVisitor {
267
280
type Ident = Symbol ;
268
281
@@ -282,19 +295,25 @@ fn gather_doc_tests(expr: &SpannedExpr<Symbol>) -> Vec<(String, String)> {
282
295
}
283
296
}
284
297
}
298
+
285
299
Expr :: TypeBindings ( binds, _) => {
286
300
for bind in & * * binds {
287
- if let Some ( ref comment) = bind. metadata . comment ( ) {
288
- let source = make_test ( & comment. content ) ;
289
- if !source. is_empty ( ) {
290
- self . 0 . push ( (
291
- format ! ( "{}" , bind. name. value. declared_name( ) ) ,
292
- String :: from ( source) ,
293
- ) ) ;
294
- }
295
- }
301
+ self . make_test_from_metadata (
302
+ bind. name . value . declared_name ( ) ,
303
+ & bind. metadata ,
304
+ ) ;
305
+ }
306
+ }
307
+
308
+ Expr :: Record { types, exprs, .. } => {
309
+ for field in & * * types {
310
+ self . make_test_from_metadata ( field. name . declared_name ( ) , & field. metadata ) ;
311
+ }
312
+ for field in & * * exprs {
313
+ self . make_test_from_metadata ( field. name . declared_name ( ) , & field. metadata ) ;
296
314
}
297
315
}
316
+
298
317
_ => ( ) ,
299
318
}
300
319
walk_expr ( self , expr) ;
0 commit comments