File: doc-cfg.rs

package info (click to toggle)
rustc 1.85.0%2Bdfsg3-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, trixie
  • size: 893,396 kB
  • sloc: xml: 158,127; python: 35,830; javascript: 19,497; cpp: 19,002; sh: 17,245; ansic: 13,127; asm: 4,376; makefile: 1,051; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (101 lines) | stat: -rw-r--r-- 3,979 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#![feature(doc_cfg)]
#![feature(target_feature, cfg_target_feature)]

//@ has doc_cfg/struct.Portable.html
//@ !has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' ''
//@ has - '//*[@id="method.unix_and_arm_only_function"]' 'fn unix_and_arm_only_function()'
//@ has - '//*[@class="stab portability"]' 'Available on Unix and ARM only.'
//@ has - '//*[@id="method.wasi_and_wasm32_only_function"]' 'fn wasi_and_wasm32_only_function()'
//@ has - '//*[@class="stab portability"]' 'Available on WASI and WebAssembly only.'
pub struct Portable;

//@ has doc_cfg/unix_only/index.html \
//  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
//  'Available on Unix only.'
//@ matches - '//*[@class="item-name"]//*[@class="stab portability"]' '\AARM\Z'
//@ count - '//*[@class="stab portability"]' 2
#[doc(cfg(unix))]
pub mod unix_only {
    //@ has doc_cfg/unix_only/fn.unix_only_function.html \
    //  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
    //  'Available on Unix only.'
    //@ count - '//*[@class="stab portability"]' 1
    pub fn unix_only_function() {
        content::should::be::irrelevant();
    }

    //@ has doc_cfg/unix_only/trait.ArmOnly.html \
    //  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
    //  'Available on Unix and ARM only.'
    //@ count - '//*[@class="stab portability"]' 1
    #[doc(cfg(target_arch = "arm"))]
    pub trait ArmOnly {
        fn unix_and_arm_only_function();
    }

    #[doc(cfg(target_arch = "arm"))]
    impl ArmOnly for super::Portable {
        fn unix_and_arm_only_function() {}
    }
}

//@ has doc_cfg/wasi_only/index.html \
//  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
//  'Available on WASI only.'
//@ matches - '//*[@class="item-name"]//*[@class="stab portability"]' '\AWebAssembly\Z'
//@ count - '//*[@class="stab portability"]' 2
#[doc(cfg(target_os = "wasi"))]
pub mod wasi_only {
    //@ has doc_cfg/wasi_only/fn.wasi_only_function.html \
    //  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
    //  'Available on WASI only.'
    //@ count - '//*[@class="stab portability"]' 1
    pub fn wasi_only_function() {
        content::should::be::irrelevant();
    }

    //@ has doc_cfg/wasi_only/trait.Wasm32Only.html \
    //  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
    //  'Available on WASI and WebAssembly only.'
    //@ count - '//*[@class="stab portability"]' 1
    #[doc(cfg(target_arch = "wasm32"))]
    pub trait Wasm32Only {
        fn wasi_and_wasm32_only_function();
    }

    #[doc(cfg(target_arch = "wasm32"))]
    impl Wasm32Only for super::Portable {
        fn wasi_and_wasm32_only_function() {}
    }
}

// tagging a function with `#[target_feature]` creates a doc(cfg(target_feature)) node for that
// item as well

// the portability header is different on the module view versus the full view
//@ has doc_cfg/index.html
//@ matches - '//*[@class="item-name"]//*[@class="stab portability"]' '\Aavx\Z'

//@ has doc_cfg/fn.uses_target_feature.html
//@ has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
//        'Available with target feature avx only.'
#[target_feature(enable = "avx")]
pub unsafe fn uses_target_feature() {
    content::should::be::irrelevant();
}

//@ has doc_cfg/fn.uses_cfg_target_feature.html
//@ has - '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
//        'Available with target feature avx only.'
#[doc(cfg(target_feature = "avx"))]
pub fn uses_cfg_target_feature() {
    uses_target_feature();
}

// multiple attributes should be allowed
//@ has doc_cfg/fn.multiple_attrs.html \
//  '//*[@id="main-content"]/*[@class="item-info"]/*[@class="stab portability"]' \
//  'Available on x and y and z only.'
#[doc(cfg(x))]
#[doc(cfg(y), cfg(z))]
pub fn multiple_attrs() {}