@@ -360,6 +360,8 @@ pub struct TopLevelMod<'db> {
360
360
pub ingot : IngotId < ' db > ,
361
361
pub ( crate ) file : InputFile ,
362
362
}
363
+
364
+ #[ salsa:: tracked]
363
365
impl < ' db > TopLevelMod < ' db > {
364
366
pub fn lazy_span ( self ) -> LazyTopModSpan < ' db > {
365
367
LazyTopModSpan :: new ( self )
@@ -413,207 +415,114 @@ impl<'db> TopLevelMod<'db> {
413
415
414
416
/// Returns all items in the top level module including ones in nested
415
417
/// modules.
416
- pub fn all_items ( self , db : & ' db dyn HirDb ) -> & ' db Vec < ItemKind < ' db > > {
417
- all_items_in_top_mod ( db, self )
418
+ #[ salsa:: tracked( return_ref) ]
419
+ pub fn all_items ( self , db : & ' db dyn HirDb ) -> Vec < ItemKind < ' db > > {
420
+ self . children_nested ( db) . collect ( )
418
421
}
419
422
420
423
/// Returns all structs in the top level module including ones in nested
421
424
/// modules.
422
- pub fn all_structs ( self , db : & ' db dyn HirDb ) -> & ' db Vec < Struct < ' db > > {
423
- all_structs_in_top_mod ( db, self )
425
+ #[ salsa:: tracked( return_ref) ]
426
+ pub fn all_structs ( self , db : & ' db dyn HirDb ) -> Vec < Struct < ' db > > {
427
+ self . all_items ( db)
428
+ . iter ( )
429
+ . filter_map ( |item| match item {
430
+ ItemKind :: Struct ( struct_) => Some ( * struct_) ,
431
+ _ => None ,
432
+ } )
433
+ . collect ( )
424
434
}
425
435
426
436
/// Returns all enums in the top level module including ones in nested
427
437
/// modules.
428
- pub fn all_enums ( self , db : & ' db dyn HirDb ) -> & ' db Vec < Enum < ' db > > {
429
- all_enums_in_top_mod ( db, self )
438
+ #[ salsa:: tracked( return_ref) ]
439
+ pub fn all_enums ( self , db : & ' db dyn HirDb ) -> Vec < Enum < ' db > > {
440
+ self . all_items ( db)
441
+ . iter ( )
442
+ . filter_map ( |item| match item {
443
+ ItemKind :: Enum ( enum_) => Some ( * enum_) ,
444
+ _ => None ,
445
+ } )
446
+ . collect ( )
430
447
}
431
448
432
449
/// Returns all contracts in the top level module including ones in nested
433
450
/// modules.
434
- pub fn all_contracts ( self , db : & ' db dyn HirDb ) -> & ' db Vec < Contract < ' db > > {
435
- all_contracts_in_top_mod ( db, self )
451
+ #[ salsa:: tracked( return_ref) ]
452
+ pub fn all_contracts ( self , db : & ' db dyn HirDb ) -> Vec < Contract < ' db > > {
453
+ self . all_items ( db)
454
+ . iter ( )
455
+ . filter_map ( |item| match item {
456
+ ItemKind :: Contract ( contract) => Some ( * contract) ,
457
+ _ => None ,
458
+ } )
459
+ . collect ( )
436
460
}
437
461
438
462
/// Returns all type aliases in the top level module including ones in
439
463
/// nested modules.
440
- pub fn all_type_aliases ( self , db : & ' db dyn HirDb ) -> & ' db Vec < TypeAlias < ' db > > {
441
- all_type_aliases_in_top_mod ( db, self )
464
+ #[ salsa:: tracked( return_ref) ]
465
+ pub fn all_type_aliases ( self , db : & ' db dyn HirDb ) -> Vec < TypeAlias < ' db > > {
466
+ self . all_items ( db)
467
+ . iter ( )
468
+ . filter_map ( |item| match item {
469
+ ItemKind :: TypeAlias ( alias) => Some ( * alias) ,
470
+ _ => None ,
471
+ } )
472
+ . collect ( )
442
473
}
443
474
444
475
/// Returns all traits in the top level module including ones in nested
445
476
/// modules.
446
- pub fn all_traits ( self , db : & ' db dyn HirDb ) -> & ' db Vec < Trait < ' db > > {
447
- all_traits_in_top_mod ( db, self )
477
+ #[ salsa:: tracked( return_ref) ]
478
+ pub fn all_traits ( self , db : & ' db dyn HirDb ) -> Vec < Trait < ' db > > {
479
+ self . all_items ( db)
480
+ . iter ( )
481
+ . filter_map ( |item| match item {
482
+ ItemKind :: Trait ( trait_) => Some ( * trait_) ,
483
+ _ => None ,
484
+ } )
485
+ . collect ( )
448
486
}
449
487
450
- pub fn all_funcs ( self , db : & ' db dyn HirDb ) -> & ' db Vec < Func < ' db > > {
451
- all_funcs_in_top_mod ( db, self )
488
+ #[ salsa:: tracked( return_ref) ]
489
+ pub fn all_funcs ( self , db : & ' db dyn HirDb ) -> Vec < Func < ' db > > {
490
+ self . all_items ( db)
491
+ . iter ( )
492
+ . filter_map ( |item| match item {
493
+ ItemKind :: Func ( func_) => Some ( * func_) ,
494
+ _ => None ,
495
+ } )
496
+ . collect ( )
452
497
}
453
498
454
499
/// Returns all traits in the top level module including ones in nested
455
500
/// modules.
456
- pub fn all_impl_traits ( self , db : & ' db dyn HirDb ) -> & ' db Vec < ImplTrait < ' db > > {
457
- all_impl_trait_in_top_mod ( db, self )
501
+ #[ salsa:: tracked( return_ref) ]
502
+ pub fn all_impl_traits ( self , db : & ' db dyn HirDb ) -> Vec < ImplTrait < ' db > > {
503
+ self . all_items ( db)
504
+ . iter ( )
505
+ . filter_map ( |item| match item {
506
+ ItemKind :: ImplTrait ( impl_trait) => Some ( * impl_trait) ,
507
+ _ => None ,
508
+ } )
509
+ . collect ( )
458
510
}
459
511
460
512
/// Returns all impls in the top level module including ones in nested
461
513
/// modules.
462
- pub fn all_impls ( self , db : & ' db dyn HirDb ) -> & ' db Vec < Impl < ' db > > {
463
- all_impl_in_top_mod ( db, self )
514
+ #[ salsa:: tracked( return_ref) ]
515
+ pub fn all_impls ( self , db : & ' db dyn HirDb ) -> Vec < Impl < ' db > > {
516
+ self . all_items ( db)
517
+ . iter ( )
518
+ . filter_map ( |item| match item {
519
+ ItemKind :: Impl ( impl_) => Some ( * impl_) ,
520
+ _ => None ,
521
+ } )
522
+ . collect ( )
464
523
}
465
524
}
466
525
467
- #[ salsa:: tracked( return_ref) ]
468
- pub fn all_top_modules_in_ingot < ' db > (
469
- db : & ' db dyn HirDb ,
470
- ingot : IngotId < ' db > ,
471
- ) -> Vec < TopLevelMod < ' db > > {
472
- let tree = ingot. module_tree ( db) ;
473
- tree. all_modules ( ) . collect ( )
474
- }
475
-
476
- #[ salsa:: tracked( return_ref) ]
477
- pub fn all_enums_in_ingot < ' db > ( db : & ' db dyn HirDb , ingot : IngotId < ' db > ) -> Vec < Enum < ' db > > {
478
- ingot
479
- . all_modules ( db)
480
- . iter ( )
481
- . flat_map ( |top_mod| top_mod. all_enums ( db) . iter ( ) . copied ( ) )
482
- . collect ( )
483
- }
484
-
485
- #[ salsa:: tracked( return_ref) ]
486
- pub fn all_impl_traits_in_ingot < ' db > (
487
- db : & ' db dyn HirDb ,
488
- ingot : IngotId < ' db > ,
489
- ) -> Vec < ImplTrait < ' db > > {
490
- ingot
491
- . all_modules ( db)
492
- . iter ( )
493
- . flat_map ( |top_mod| top_mod. all_impl_traits ( db) . iter ( ) . copied ( ) )
494
- . collect ( )
495
- }
496
-
497
- #[ salsa:: tracked( return_ref) ]
498
- pub fn all_impls_in_ingot < ' db > ( db : & ' db dyn HirDb , ingot : IngotId < ' db > ) -> Vec < Impl < ' db > > {
499
- ingot
500
- . all_modules ( db)
501
- . iter ( )
502
- . flat_map ( |top_mod| top_mod. all_impls ( db) . iter ( ) . copied ( ) )
503
- . collect ( )
504
- }
505
-
506
- #[ salsa:: tracked( return_ref) ]
507
- pub fn all_items_in_top_mod < ' db > (
508
- db : & ' db dyn HirDb ,
509
- top_mod : TopLevelMod < ' db > ,
510
- ) -> Vec < ItemKind < ' db > > {
511
- top_mod. children_nested ( db) . collect ( )
512
- }
513
-
514
- #[ salsa:: tracked( return_ref) ]
515
- pub fn all_structs_in_top_mod < ' db > (
516
- db : & ' db dyn HirDb ,
517
- top_mod : TopLevelMod < ' db > ,
518
- ) -> Vec < Struct < ' db > > {
519
- all_items_in_top_mod ( db, top_mod)
520
- . iter ( )
521
- . filter_map ( |item| match item {
522
- ItemKind :: Struct ( struct_) => Some ( * struct_) ,
523
- _ => None ,
524
- } )
525
- . collect ( )
526
- }
527
-
528
- #[ salsa:: tracked( return_ref) ]
529
- pub fn all_enums_in_top_mod < ' db > ( db : & ' db dyn HirDb , top_mod : TopLevelMod < ' db > ) -> Vec < Enum < ' db > > {
530
- all_items_in_top_mod ( db, top_mod)
531
- . iter ( )
532
- . filter_map ( |item| match item {
533
- ItemKind :: Enum ( enum_) => Some ( * enum_) ,
534
- _ => None ,
535
- } )
536
- . collect ( )
537
- }
538
-
539
- #[ salsa:: tracked( return_ref) ]
540
- pub fn all_type_aliases_in_top_mod < ' db > (
541
- db : & ' db dyn HirDb ,
542
- top_mod : TopLevelMod < ' db > ,
543
- ) -> Vec < TypeAlias < ' db > > {
544
- all_items_in_top_mod ( db, top_mod)
545
- . iter ( )
546
- . filter_map ( |item| match item {
547
- ItemKind :: TypeAlias ( alias) => Some ( * alias) ,
548
- _ => None ,
549
- } )
550
- . collect ( )
551
- }
552
-
553
- #[ salsa:: tracked( return_ref) ]
554
- pub fn all_contracts_in_top_mod < ' db > (
555
- db : & ' db dyn HirDb ,
556
- top_mod : TopLevelMod < ' db > ,
557
- ) -> Vec < Contract < ' db > > {
558
- all_items_in_top_mod ( db, top_mod)
559
- . iter ( )
560
- . filter_map ( |item| match item {
561
- ItemKind :: Contract ( contract) => Some ( * contract) ,
562
- _ => None ,
563
- } )
564
- . collect ( )
565
- }
566
-
567
- #[ salsa:: tracked( return_ref) ]
568
- pub fn all_traits_in_top_mod < ' db > (
569
- db : & ' db dyn HirDb ,
570
- top_mod : TopLevelMod < ' db > ,
571
- ) -> Vec < Trait < ' db > > {
572
- all_items_in_top_mod ( db, top_mod)
573
- . iter ( )
574
- . filter_map ( |item| match item {
575
- ItemKind :: Trait ( trait_) => Some ( * trait_) ,
576
- _ => None ,
577
- } )
578
- . collect ( )
579
- }
580
-
581
- #[ salsa:: tracked( return_ref) ]
582
- pub fn all_funcs_in_top_mod < ' db > ( db : & ' db dyn HirDb , top_mod : TopLevelMod < ' db > ) -> Vec < Func < ' db > > {
583
- all_items_in_top_mod ( db, top_mod)
584
- . iter ( )
585
- . filter_map ( |item| match item {
586
- ItemKind :: Func ( func_) => Some ( * func_) ,
587
- _ => None ,
588
- } )
589
- . collect ( )
590
- }
591
-
592
- #[ salsa:: tracked( return_ref) ]
593
- pub fn all_impl_in_top_mod < ' db > ( db : & ' db dyn HirDb , top_mod : TopLevelMod < ' db > ) -> Vec < Impl < ' db > > {
594
- all_items_in_top_mod ( db, top_mod)
595
- . iter ( )
596
- . filter_map ( |item| match item {
597
- ItemKind :: Impl ( impl_) => Some ( * impl_) ,
598
- _ => None ,
599
- } )
600
- . collect ( )
601
- }
602
-
603
- #[ salsa:: tracked( return_ref) ]
604
- pub fn all_impl_trait_in_top_mod < ' db > (
605
- db : & ' db dyn HirDb ,
606
- top_mod : TopLevelMod < ' db > ,
607
- ) -> Vec < ImplTrait < ' db > > {
608
- all_items_in_top_mod ( db, top_mod)
609
- . iter ( )
610
- . filter_map ( |item| match item {
611
- ItemKind :: ImplTrait ( impl_trait) => Some ( * impl_trait) ,
612
- _ => None ,
613
- } )
614
- . collect ( )
615
- }
616
-
617
526
#[ salsa:: tracked]
618
527
pub struct Mod < ' db > {
619
528
#[ id]
0 commit comments