rust/tests/rustdoc-json/attrs/target_feature.rs
Alona Enraght-Moony 078332fdc8 rustdoc-json: Structured attributes
Implements https://www.github.com/rust-lang/rust/issues/141358.

This has 2 primary benefits:

1. For rustdoc-json consumers, they no longer need to parse strings of
   attributes, but it's there in a structured and normalized way.
2. For rustc contributors, the output of HIR pretty printing is no
   longer a versioned thing in the output. People can work on
   https://github.com/rust-lang/rust/issues/131229 without needing to
   bump `FORMAT_VERSION`.

(Over time, as the attribute refractor continues, I expect we'll add new
things to `rustdoc_json_types::Attribute`. But this can be done
separately to the rustc changes).
2025-07-15 16:52:41 +00:00

50 lines
2.1 KiB
Rust

//@ is "$.index[?(@.name=='test1')].inner.function.header.is_unsafe" false
//@ count "$.index[?(@.name=='test1')].attrs[*]" 1
//@ is "$.index[?(@.name=='test1')].attrs[*].target_feature.enable" '["avx"]'
#[target_feature(enable = "avx")]
pub fn test1() {}
//@ is "$.index[?(@.name=='test2')].inner.function.header.is_unsafe" false
//@ count "$.index[?(@.name=='test2')].attrs[*]" 1
//@ is "$.index[?(@.name=='test2')].attrs[*].target_feature.enable" '["avx", "avx2"]'
#[target_feature(enable = "avx,avx2")]
pub fn test2() {}
//@ is "$.index[?(@.name=='test3')].inner.function.header.is_unsafe" false
//@ count "$.index[?(@.name=='test3')].attrs[*]" 1
//@ is "$.index[?(@.name=='test3')].attrs[*].target_feature.enable" '["avx", "avx2"]'
#[target_feature(enable = "avx", enable = "avx2")]
pub fn test3() {}
//@ is "$.index[?(@.name=='test4')].inner.function.header.is_unsafe" false
//@ count "$.index[?(@.name=='test4')].attrs[*]" 1
//@ is "$.index[?(@.name=='test4')].attrs[*].target_feature.enable" '["avx", "avx2", "avx512f"]'
#[target_feature(enable = "avx", enable = "avx2,avx512f")]
pub fn test4() {}
//@ count "$.index[?(@.name=='test5')].attrs[*]" 1
//@ is "$.index[?(@.name=='test5')].attrs[*].target_feature.enable" '["avx", "avx2"]'
#[target_feature(enable = "avx")]
#[target_feature(enable = "avx2")]
pub fn test5() {}
//@ is "$.index[?(@.name=='test_unsafe_fn')].inner.function.header.is_unsafe" true
//@ count "$.index[?(@.name=='test_unsafe_fn')].attrs[*]" 1
//@ is "$.index[?(@.name=='test_unsafe_fn')].attrs[*].target_feature.enable" '["avx"]'
#[target_feature(enable = "avx")]
pub unsafe fn test_unsafe_fn() {}
pub struct Example;
impl Example {
//@ is "$.index[?(@.name=='safe_assoc_fn')].inner.function.header.is_unsafe" false
//@ is "$.index[?(@.name=='safe_assoc_fn')].attrs[*].target_feature.enable" '["avx"]'
#[target_feature(enable = "avx")]
pub fn safe_assoc_fn() {}
//@ is "$.index[?(@.name=='unsafe_assoc_fn')].inner.function.header.is_unsafe" true
//@ is "$.index[?(@.name=='unsafe_assoc_fn')].attrs[*].target_feature.enable" '["avx"]'
#[target_feature(enable = "avx")]
pub unsafe fn unsafe_assoc_fn() {}
}