@@ -1692,13 +1692,13 @@ fn print_item(cx: &Context, item: &clean::Item, buf: &mut Buffer, cache: &Cache)
16921692 debug_assert ! ( !item. is_stripped( ) ) ;
16931693 // Write the breadcrumb trail header for the top
16941694 write ! ( buf, "<h1 class=\" fqn\" ><span class=\" out-of-band\" >" ) ;
1695- if let Some ( version ) = item . stable_since ( ) {
1696- write ! (
1697- buf ,
1698- "<span class= \" since \" title= \" Stable since Rust version {0} \" >{0}</span>" ,
1699- version
1700- ) ;
1701- }
1695+ render_stability_since_raw (
1696+ buf ,
1697+ item . stable_since ( ) . as_deref ( ) ,
1698+ item . const_stable_since ( ) . as_deref ( ) ,
1699+ None ,
1700+ None ,
1701+ ) ;
17021702 write ! (
17031703 buf,
17041704 "<span id=\" render-detail\" >\
@@ -2476,6 +2476,7 @@ fn render_implementor(
24762476 AssocItemLink :: Anchor ( None ) ,
24772477 RenderMode :: Normal ,
24782478 implementor. impl_item . stable_since ( ) . as_deref ( ) ,
2479+ implementor. impl_item . const_stable_since ( ) . as_deref ( ) ,
24792480 false ,
24802481 Some ( use_absolute) ,
24812482 false ,
@@ -2506,6 +2507,7 @@ fn render_impls(
25062507 assoc_link,
25072508 RenderMode :: Normal ,
25082509 containing_item. stable_since ( ) . as_deref ( ) ,
2510+ containing_item. const_stable_since ( ) . as_deref ( ) ,
25092511 true ,
25102512 None ,
25112513 false ,
@@ -2756,6 +2758,7 @@ fn item_trait(w: &mut Buffer, cx: &Context, it: &clean::Item, t: &clean::Trait,
27562758 assoc_link,
27572759 RenderMode :: Normal ,
27582760 implementor. impl_item . stable_since ( ) . as_deref ( ) ,
2761+ implementor. impl_item . const_stable_since ( ) . as_deref ( ) ,
27592762 false ,
27602763 None ,
27612764 true ,
@@ -2898,10 +2901,40 @@ fn assoc_type(
28982901 }
28992902}
29002903
2901- fn render_stability_since_raw ( w : & mut Buffer , ver : Option < & str > , containing_ver : Option < & str > ) {
2904+ fn render_stability_since_raw (
2905+ w : & mut Buffer ,
2906+ ver : Option < & str > ,
2907+ const_ver : Option < & str > ,
2908+ containing_ver : Option < & str > ,
2909+ containing_const_ver : Option < & str > ,
2910+ ) {
2911+ let ver = ver. and_then ( |inner| if !inner. is_empty ( ) { Some ( inner) } else { None } ) ;
2912+
2913+ let const_ver = const_ver. and_then ( |inner| if !inner. is_empty ( ) { Some ( inner) } else { None } ) ;
2914+
29022915 if let Some ( v) = ver {
2903- if containing_ver != ver && !v. is_empty ( ) {
2904- write ! ( w, "<span class=\" since\" title=\" Stable since Rust version {0}\" >{0}</span>" , v)
2916+ if let Some ( cv) = const_ver {
2917+ if const_ver != containing_const_ver {
2918+ write ! (
2919+ w,
2920+ "<span class=\" since\" title=\" Stable since Rust version {0}, const since {1}\" >{0} (const: {1})</span>" ,
2921+ v, cv
2922+ ) ;
2923+ } else if ver != containing_ver {
2924+ write ! (
2925+ w,
2926+ "<span class=\" since\" title=\" Stable since Rust version {0}\" >{0}</span>" ,
2927+ v
2928+ ) ;
2929+ }
2930+ } else {
2931+ if ver != containing_ver {
2932+ write ! (
2933+ w,
2934+ "<span class=\" since\" title=\" Stable since Rust version {0}\" >{0}</span>" ,
2935+ v
2936+ ) ;
2937+ }
29052938 }
29062939 }
29072940}
@@ -2910,7 +2943,9 @@ fn render_stability_since(w: &mut Buffer, item: &clean::Item, containing_item: &
29102943 render_stability_since_raw (
29112944 w,
29122945 item. stable_since ( ) . as_deref ( ) ,
2946+ item. const_stable_since ( ) . as_deref ( ) ,
29132947 containing_item. stable_since ( ) . as_deref ( ) ,
2948+ containing_item. const_stable_since ( ) . as_deref ( ) ,
29142949 )
29152950}
29162951
@@ -3462,6 +3497,7 @@ fn render_assoc_items(
34623497 AssocItemLink :: Anchor ( None ) ,
34633498 render_mode,
34643499 containing_item. stable_since ( ) . as_deref ( ) ,
3500+ containing_item. const_stable_since ( ) . as_deref ( ) ,
34653501 true ,
34663502 None ,
34673503 false ,
@@ -3654,6 +3690,7 @@ fn render_impl(
36543690 link : AssocItemLink < ' _ > ,
36553691 render_mode : RenderMode ,
36563692 outer_version : Option < & str > ,
3693+ outer_const_version : Option < & str > ,
36573694 show_def_docs : bool ,
36583695 use_absolute : Option < bool > ,
36593696 is_on_foreign_type : bool ,
@@ -3705,11 +3742,13 @@ fn render_impl(
37053742 ) ;
37063743 }
37073744 write ! ( w, "<a href=\" #{}\" class=\" anchor\" ></a>" , id) ;
3708- let since = i. impl_item . stability . as_ref ( ) . and_then ( |s| match s. level {
3709- StabilityLevel :: Stable { since } => Some ( since. as_str ( ) ) ,
3710- StabilityLevel :: Unstable { .. } => None ,
3711- } ) ;
3712- render_stability_since_raw ( w, since. as_deref ( ) , outer_version) ;
3745+ render_stability_since_raw (
3746+ w,
3747+ i. impl_item . stable_since ( ) . as_deref ( ) ,
3748+ i. impl_item . const_stable_since ( ) . as_deref ( ) ,
3749+ outer_version,
3750+ outer_const_version,
3751+ ) ;
37133752 write_srclink ( cx, & i. impl_item , w, cache) ;
37143753 write ! ( w, "</h3>" ) ;
37153754
@@ -3746,6 +3785,7 @@ fn render_impl(
37463785 render_mode : RenderMode ,
37473786 is_default_item : bool ,
37483787 outer_version : Option < & str > ,
3788+ outer_const_version : Option < & str > ,
37493789 trait_ : Option < & clean:: Trait > ,
37503790 show_def_docs : bool ,
37513791 cache : & Cache ,
@@ -3775,7 +3815,13 @@ fn render_impl(
37753815 write ! ( w, "<code>" ) ;
37763816 render_assoc_item ( w, item, link. anchor ( & id) , ItemType :: Impl ) ;
37773817 write ! ( w, "</code>" ) ;
3778- render_stability_since_raw ( w, item. stable_since ( ) . as_deref ( ) , outer_version) ;
3818+ render_stability_since_raw (
3819+ w,
3820+ item. stable_since ( ) . as_deref ( ) ,
3821+ item. const_stable_since ( ) . as_deref ( ) ,
3822+ outer_version,
3823+ outer_const_version,
3824+ ) ;
37793825 write_srclink ( cx, item, w, cache) ;
37803826 write ! ( w, "</h4>" ) ;
37813827 }
@@ -3791,7 +3837,13 @@ fn render_impl(
37913837 write ! ( w, "<h4 id=\" {}\" class=\" {}{}\" ><code>" , id, item_type, extra_class) ;
37923838 assoc_const ( w, item, ty, default. as_ref ( ) , link. anchor ( & id) , "" ) ;
37933839 write ! ( w, "</code>" ) ;
3794- render_stability_since_raw ( w, item. stable_since ( ) . as_deref ( ) , outer_version) ;
3840+ render_stability_since_raw (
3841+ w,
3842+ item. stable_since ( ) . as_deref ( ) ,
3843+ item. const_stable_since ( ) . as_deref ( ) ,
3844+ outer_version,
3845+ outer_const_version,
3846+ ) ;
37953847 write_srclink ( cx, item, w, cache) ;
37963848 write ! ( w, "</h4>" ) ;
37973849 }
@@ -3854,6 +3906,7 @@ fn render_impl(
38543906 render_mode,
38553907 false ,
38563908 outer_version,
3909+ outer_const_version,
38573910 trait_,
38583911 show_def_docs,
38593912 cache,
@@ -3868,6 +3921,7 @@ fn render_impl(
38683921 parent : & clean:: Item ,
38693922 render_mode : RenderMode ,
38703923 outer_version : Option < & str > ,
3924+ outer_const_version : Option < & str > ,
38713925 show_def_docs : bool ,
38723926 cache : & Cache ,
38733927 ) {
@@ -3888,6 +3942,7 @@ fn render_impl(
38883942 render_mode,
38893943 true ,
38903944 outer_version,
3945+ outer_const_version,
38913946 None ,
38923947 show_def_docs,
38933948 cache,
@@ -3909,6 +3964,7 @@ fn render_impl(
39093964 & i. impl_item ,
39103965 render_mode,
39113966 outer_version,
3967+ outer_const_version,
39123968 show_def_docs,
39133969 cache,
39143970 ) ;
0 commit comments