@@ -308,19 +308,17 @@ pub(crate) fn runnable_fn(
308
308
sema : & Semantics < ' _ , RootDatabase > ,
309
309
def : hir:: Function ,
310
310
) -> Option < Runnable > {
311
- let name = def. name ( sema. db ) . to_smol_str ( ) ;
312
-
313
- let root = def. module ( sema. db ) . krate ( ) . root_module ( ) ;
314
-
315
- let kind = if name == "main" && def. module ( sema. db ) == root {
311
+ let kind = if def. is_main ( sema. db ) {
316
312
RunnableKind :: Bin
317
313
} else {
318
314
let test_id = || {
319
315
let canonical_path = {
320
316
let def: hir:: ModuleDef = def. into ( ) ;
321
317
def. canonical_path ( sema. db )
322
318
} ;
323
- canonical_path. map ( TestId :: Path ) . unwrap_or ( TestId :: Name ( name) )
319
+ canonical_path
320
+ . map ( TestId :: Path )
321
+ . unwrap_or ( TestId :: Name ( def. name ( sema. db ) . to_smol_str ( ) ) )
324
322
} ;
325
323
326
324
if def. is_test ( sema. db ) {
@@ -587,6 +585,9 @@ mod tests {
587
585
$0
588
586
fn main() {}
589
587
588
+ #[export_name = "main"]
589
+ fn __cortex_m_rt_main_trampoline() {}
590
+
590
591
#[test]
591
592
fn test_foo() {}
592
593
@@ -604,7 +605,7 @@ mod not_a_root {
604
605
fn main() {}
605
606
}
606
607
"# ,
607
- & [ TestMod , Bin , Test , Test , Test , Bench ] ,
608
+ & [ TestMod , Bin , Bin , Test , Test , Test , Bench ] ,
608
609
expect ! [ [ r#"
609
610
[
610
611
Runnable {
@@ -613,7 +614,7 @@ mod not_a_root {
613
614
file_id: FileId(
614
615
0,
615
616
),
616
- full_range: 0..190 ,
617
+ full_range: 0..253 ,
617
618
name: "",
618
619
kind: Module,
619
620
},
@@ -642,8 +643,22 @@ mod not_a_root {
642
643
file_id: FileId(
643
644
0,
644
645
),
645
- full_range: 15..39,
646
- focus_range: 26..34,
646
+ full_range: 15..76,
647
+ focus_range: 42..71,
648
+ name: "__cortex_m_rt_main_trampoline",
649
+ kind: Function,
650
+ },
651
+ kind: Bin,
652
+ cfg: None,
653
+ },
654
+ Runnable {
655
+ use_name_in_title: false,
656
+ nav: NavigationTarget {
657
+ file_id: FileId(
658
+ 0,
659
+ ),
660
+ full_range: 78..102,
661
+ focus_range: 89..97,
647
662
name: "test_foo",
648
663
kind: Function,
649
664
},
@@ -663,8 +678,8 @@ mod not_a_root {
663
678
file_id: FileId(
664
679
0,
665
680
),
666
- full_range: 41..92 ,
667
- focus_range: 73..87 ,
681
+ full_range: 104..155 ,
682
+ focus_range: 136..150 ,
668
683
name: "test_full_path",
669
684
kind: Function,
670
685
},
@@ -684,8 +699,8 @@ mod not_a_root {
684
699
file_id: FileId(
685
700
0,
686
701
),
687
- full_range: 94..128 ,
688
- focus_range: 115..123 ,
702
+ full_range: 157..191 ,
703
+ focus_range: 178..186 ,
689
704
name: "test_foo",
690
705
kind: Function,
691
706
},
@@ -705,8 +720,8 @@ mod not_a_root {
705
720
file_id: FileId(
706
721
0,
707
722
),
708
- full_range: 130..152 ,
709
- focus_range: 142..147 ,
723
+ full_range: 193..215 ,
724
+ focus_range: 205..210 ,
710
725
name: "bench",
711
726
kind: Function,
712
727
},
@@ -1655,12 +1670,18 @@ macro_rules! gen2 {
1655
1670
}
1656
1671
}
1657
1672
}
1673
+ macro_rules! gen_main {
1674
+ () => {
1675
+ fn main() {}
1676
+ }
1677
+ }
1658
1678
mod tests {
1659
1679
gen!();
1660
1680
}
1661
1681
gen2!();
1682
+ gen_main!();
1662
1683
"# ,
1663
- & [ TestMod , TestMod , Test , Test , TestMod ] ,
1684
+ & [ TestMod , TestMod , Test , Test , TestMod , Bin ] ,
1664
1685
expect ! [ [ r#"
1665
1686
[
1666
1687
Runnable {
@@ -1669,7 +1690,7 @@ gen2!();
1669
1690
file_id: FileId(
1670
1691
0,
1671
1692
),
1672
- full_range: 0..237 ,
1693
+ full_range: 0..315 ,
1673
1694
name: "",
1674
1695
kind: Module,
1675
1696
},
@@ -1684,8 +1705,8 @@ gen2!();
1684
1705
file_id: FileId(
1685
1706
0,
1686
1707
),
1687
- full_range: 202..227 ,
1688
- focus_range: 206..211 ,
1708
+ full_range: 267..292 ,
1709
+ focus_range: 271..276 ,
1689
1710
name: "tests",
1690
1711
kind: Module,
1691
1712
description: "mod tests",
@@ -1701,7 +1722,7 @@ gen2!();
1701
1722
file_id: FileId(
1702
1723
0,
1703
1724
),
1704
- full_range: 218..225 ,
1725
+ full_range: 283..290 ,
1705
1726
name: "foo_test",
1706
1727
kind: Function,
1707
1728
},
@@ -1721,7 +1742,7 @@ gen2!();
1721
1742
file_id: FileId(
1722
1743
0,
1723
1744
),
1724
- full_range: 228..236 ,
1745
+ full_range: 293..301 ,
1725
1746
name: "foo_test2",
1726
1747
kind: Function,
1727
1748
},
@@ -1741,7 +1762,7 @@ gen2!();
1741
1762
file_id: FileId(
1742
1763
0,
1743
1764
),
1744
- full_range: 228..236 ,
1765
+ full_range: 293..301 ,
1745
1766
name: "tests2",
1746
1767
kind: Module,
1747
1768
description: "mod tests2",
@@ -1751,6 +1772,19 @@ gen2!();
1751
1772
},
1752
1773
cfg: None,
1753
1774
},
1775
+ Runnable {
1776
+ use_name_in_title: false,
1777
+ nav: NavigationTarget {
1778
+ file_id: FileId(
1779
+ 0,
1780
+ ),
1781
+ full_range: 302..314,
1782
+ name: "main",
1783
+ kind: Function,
1784
+ },
1785
+ kind: Bin,
1786
+ cfg: None,
1787
+ },
1754
1788
]
1755
1789
"# ] ] ,
1756
1790
) ;
0 commit comments