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 {
647
647
) -> hir:: FnHeader {
648
648
let sig = tcx. fn_sig ( def_id) . skip_binder ( ) ;
649
649
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
+ }
651
664
} else {
652
665
hir:: Constness :: NotConst
653
666
} ;
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