rustc_attr_parsing/attributes/
lint_helpers.rs

1use rustc_attr_data_structures::AttributeKind;
2use rustc_feature::{AttributeTemplate, template};
3use rustc_span::{Symbol, sym};
4
5use crate::attributes::{AttributeOrder, OnDuplicate, SingleAttributeParser};
6use crate::context::{AcceptContext, Stage};
7use crate::parser::ArgParser;
8
9pub(crate) struct AsPtrParser;
10
11impl<S: Stage> SingleAttributeParser<S> for AsPtrParser {
12    const PATH: &[Symbol] = &[sym::rustc_as_ptr];
13    const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepFirst;
14    const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
15    const TEMPLATE: AttributeTemplate = template!(Word);
16
17    fn convert(cx: &mut AcceptContext<'_, '_, S>, _args: &ArgParser<'_>) -> Option<AttributeKind> {
18        // FIXME: check that there's no args (this is currently checked elsewhere)
19        Some(AttributeKind::AsPtr(cx.attr_span))
20    }
21}
22
23pub(crate) struct PubTransparentParser;
24impl<S: Stage> SingleAttributeParser<S> for PubTransparentParser {
25    const PATH: &[Symbol] = &[sym::rustc_pub_transparent];
26    const ATTRIBUTE_ORDER: AttributeOrder = AttributeOrder::KeepFirst;
27    const ON_DUPLICATE: OnDuplicate<S> = OnDuplicate::Error;
28    const TEMPLATE: AttributeTemplate = template!(Word);
29
30    fn convert(cx: &mut AcceptContext<'_, '_, S>, _args: &ArgParser<'_>) -> Option<AttributeKind> {
31        // FIXME: check that there's no args (this is currently checked elsewhere)
32        Some(AttributeKind::PubTransparent(cx.attr_span))
33    }
34}