introduce duplicate attribute diagnostic logic

This commit is contained in:
Jana Dönszelmann
2025-06-10 13:00:09 +02:00
parent fe5c95d4ae
commit 28bf61b9b3
4 changed files with 112 additions and 17 deletions

View File

@@ -2,7 +2,7 @@ use rustc_attr_data_structures::AttributeKind;
use rustc_span::hygiene::Transparency;
use rustc_span::{Span, Symbol, sym};
use super::{AcceptContext, SingleAttributeParser};
use super::{AcceptContext, AttributeDuplicates, SingleAttributeParser};
use crate::parser::ArgParser;
pub(crate) struct TransparencyParser;
@@ -11,10 +11,11 @@ pub(crate) struct TransparencyParser;
#[allow(rustc::untranslatable_diagnostic)]
#[allow(rustc::diagnostic_outside_of_impl)]
impl SingleAttributeParser for TransparencyParser {
const PATH: &'static [Symbol] = &[sym::rustc_macro_transparency];
const PATH: &[Symbol] = &[sym::rustc_macro_transparency];
const ON_DUPLICATE_STRATEGY: AttributeDuplicates = AttributeDuplicates::ErrorFollowing;
fn on_duplicate(cx: &crate::context::AcceptContext<'_>, first_span: Span) {
cx.dcx().span_err(vec![first_span, cx.attr_span], "multiple macro transparency attributes");
fn on_duplicate(cx: &crate::context::AcceptContext<'_>, used: Span, unused: Span) {
cx.dcx().span_err(vec![used, unused], "multiple macro transparency attributes");
}
fn convert(cx: &AcceptContext<'_>, args: &ArgParser<'_>) -> Option<AttributeKind> {