@@ -432,18 +432,20 @@ impl<'a> Resolver<'a> {
432
432
let mut imported_interfaces = HashMap :: new ( ) ;
433
433
let mut exported_interfaces = HashMap :: new ( ) ;
434
434
for item in world. items . iter ( ) {
435
- let ( name, kind, desc, spans, interfaces) = match item {
435
+ let ( docs , name, kind, desc, spans, interfaces) = match item {
436
436
// handled in `resolve_types`
437
437
ast:: WorldItem :: Use ( _) | ast:: WorldItem :: Type ( _) => continue ,
438
438
439
439
ast:: WorldItem :: Import ( import) => (
440
+ & import. docs ,
440
441
& import. name ,
441
442
& import. kind ,
442
443
"import" ,
443
444
& mut import_spans,
444
445
& mut imported_interfaces,
445
446
) ,
446
447
ast:: WorldItem :: Export ( export) => (
448
+ & export. docs ,
447
449
& export. name ,
448
450
& export. kind ,
449
451
"export" ,
@@ -462,7 +464,7 @@ impl<'a> Resolver<'a> {
462
464
}
463
465
. into ( ) ) ;
464
466
}
465
- let world_item = self . resolve_world_item ( name. name , document, kind) ?;
467
+ let world_item = self . resolve_world_item ( docs , name. name , document, kind) ?;
466
468
if let WorldItem :: Interface ( id) = world_item {
467
469
if interfaces. insert ( id, name. name ) . is_some ( ) {
468
470
return Err ( Error {
@@ -492,14 +494,15 @@ impl<'a> Resolver<'a> {
492
494
493
495
fn resolve_world_item (
494
496
& mut self ,
497
+ docs : & ast:: Docs < ' a > ,
495
498
name : & str ,
496
499
document : DocumentId ,
497
500
kind : & ast:: ExternKind < ' a > ,
498
501
) -> Result < WorldItem > {
499
502
match kind {
500
503
ast:: ExternKind :: Interface ( _span, items) => {
501
504
let prev = mem:: take ( & mut self . type_lookup ) ;
502
- let id = self . resolve_interface ( document, None , items, & Default :: default ( ) ) ?;
505
+ let id = self . resolve_interface ( document, None , items, docs ) ?;
503
506
self . type_lookup = prev;
504
507
Ok ( WorldItem :: Interface ( id) )
505
508
}
@@ -508,7 +511,7 @@ impl<'a> Resolver<'a> {
508
511
Ok ( WorldItem :: Interface ( id) )
509
512
}
510
513
ast:: ExternKind :: Func ( func) => {
511
- let func = self . resolve_function ( Docs :: default ( ) , name, func) ?;
514
+ let func = self . resolve_function ( docs , name, func) ?;
512
515
Ok ( WorldItem :: Function ( func) )
513
516
}
514
517
}
@@ -519,7 +522,7 @@ impl<'a> Resolver<'a> {
519
522
document : DocumentId ,
520
523
name : Option < & ' a str > ,
521
524
fields : & [ ast:: InterfaceItem < ' a > ] ,
522
- docs : & super :: Docs < ' a > ,
525
+ docs : & ast :: Docs < ' a > ,
523
526
) -> Result < InterfaceId > {
524
527
let docs = self . docs ( docs) ;
525
528
let interface_id = self . interfaces . alloc ( Interface {
@@ -558,19 +561,16 @@ impl<'a> Resolver<'a> {
558
561
// defined.
559
562
for field in fields {
560
563
match field {
561
- ast:: InterfaceItem :: Value ( value) => {
562
- let docs = self . docs ( & value. docs ) ;
563
- match & value. kind {
564
- ValueKind :: Func ( func) => {
565
- self . define_interface_name ( & value. name , TypeOrItem :: Item ( "function" ) ) ?;
566
- let func = self . resolve_function ( docs, value. name . name , func) ?;
567
- let prev = self . interfaces [ interface_id]
568
- . functions
569
- . insert ( value. name . name . to_string ( ) , func) ;
570
- assert ! ( prev. is_none( ) ) ;
571
- }
564
+ ast:: InterfaceItem :: Value ( value) => match & value. kind {
565
+ ValueKind :: Func ( func) => {
566
+ self . define_interface_name ( & value. name , TypeOrItem :: Item ( "function" ) ) ?;
567
+ let func = self . resolve_function ( & value. docs , value. name . name , func) ?;
568
+ let prev = self . interfaces [ interface_id]
569
+ . functions
570
+ . insert ( value. name . name . to_string ( ) , func) ;
571
+ assert ! ( prev. is_none( ) ) ;
572
572
}
573
- }
573
+ } ,
574
574
ast:: InterfaceItem :: Use ( _) | ast:: InterfaceItem :: TypeDef ( _) => { }
575
575
}
576
576
}
@@ -680,7 +680,13 @@ impl<'a> Resolver<'a> {
680
680
Ok ( ( ) )
681
681
}
682
682
683
- fn resolve_function ( & mut self , docs : Docs , name : & str , func : & ast:: Func ) -> Result < Function > {
683
+ fn resolve_function (
684
+ & mut self ,
685
+ docs : & ast:: Docs < ' _ > ,
686
+ name : & str ,
687
+ func : & ast:: Func ,
688
+ ) -> Result < Function > {
689
+ let docs = self . docs ( docs) ;
684
690
let params = self . resolve_params ( & func. params ) ?;
685
691
let results = self . resolve_results ( & func. results ) ?;
686
692
Ok ( Function {
0 commit comments