File tree Expand file tree Collapse file tree 2 files changed +50
-1
lines changed Expand file tree Collapse file tree 2 files changed +50
-1
lines changed Original file line number Diff line number Diff line change @@ -647,7 +647,20 @@ impl Item {
647647        )  -> hir:: FnHeader  { 
648648            let  sig = tcx. fn_sig ( def_id) . skip_binder ( ) ; 
649649            let  constness = if  tcx. is_const_fn ( def_id)  { 
650-                 hir:: Constness :: Const 
650+                 // rustc's `is_const_fn` returns `true` for associated functions that have an `impl const` parent 
651+                 // or that have a `#[const_trait]` parent. Do not display those as `const` in rustdoc because we 
652+                 // won't be printing correct syntax plus the syntax is unstable. 
653+                 match  tcx. opt_associated_item ( def_id)  { 
654+                     Some ( ty:: AssocItem  { 
655+                         container :  ty:: AssocItemContainer :: Impl , 
656+                         trait_item_def_id :  Some ( _) , 
657+                         ..
658+                     } ) 
659+                     | Some ( ty:: AssocItem  {  container :  ty:: AssocItemContainer :: Trait ,  .. } )  => { 
660+                         hir:: Constness :: NotConst 
661+                     } 
662+                     None  | Some ( _)  => hir:: Constness :: Const , 
663+                 } 
651664            }  else  { 
652665                hir:: Constness :: NotConst 
653666            } ; 
Original file line number Diff line number Diff line change 1+ // check that we don't render `#[const_trait]` methods as `const` - even for 
2+ // const `trait`s and `impl`s. 
3+ #![ crate_name = "foo" ]  
4+ #![ feature( const_trait_impl) ]  
5+ 
6+ //@ has foo/trait.Tr.html 
7+ //@ has - '//*[@id="tymethod.required"]' 'fn required()' 
8+ //@ !has - '//*[@id="tymethod.required"]' 'const' 
9+ //@ has - '//*[@id="method.defaulted"]' 'fn defaulted()' 
10+ //@ !has - '//*[@id="method.defaulted"]' 'const' 
11+ #[ const_trait]  
12+ pub  trait  Tr  { 
13+     fn  required ( ) ; 
14+     fn  defaulted ( )  { } 
15+ } 
16+ 
17+ pub  struct  ConstImpl  { } 
18+ pub  struct  NonConstImpl  { } 
19+ 
20+ //@ has foo/struct.ConstImpl.html 
21+ //@ has - '//*[@id="method.required"]' 'fn required()' 
22+ //@ !has - '//*[@id="method.required"]' 'const' 
23+ //@ has - '//*[@id="method.defaulted"]' 'fn defaulted()' 
24+ //@ !has - '//*[@id="method.defaulted"]' 'const' 
25+ impl  const  Tr  for  ConstImpl  { 
26+     fn  required ( )  { } 
27+ } 
28+ 
29+ //@ has foo/struct.NonConstImpl.html 
30+ //@ has - '//*[@id="method.required"]' 'fn required()' 
31+ //@ !has - '//*[@id="method.required"]' 'const' 
32+ //@ has - '//*[@id="method.defaulted"]' 'fn defaulted()' 
33+ //@ !has - '//*[@id="method.defaulted"]' 'const' 
34+ impl  Tr  for  NonConstImpl  { 
35+     fn  required ( )  { } 
36+ } 
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments