use miette::Diagnostic; use thiserror::Error; use crate::{diagnostics::AstDiagnostic, parse::Attribute, tokenize::Span}; #[derive(Error, Debug, Diagnostic)] #[error("Multiple equal signs in a row")] #[diagnostic(code(TooManyEqualSigns), severity(Error))] pub struct TooManyEqualSigns { #[label(primary, "only one equal sign should be present")] token: Span, } impl AstDiagnostic for TooManyEqualSigns { fn handle_attribute(attribute: &crate::parse::Attribute<'_>) -> Option { let Attribute::NamedArgumentWithTooManyEqualSigns { equal_signs, .. } = attribute else { return None; }; Some(Self { token: Span { start: equal_signs .first() .expect("at least two equal signs") .span .start, end: equal_signs .last() .expect("at least two equal signs") .span .end, }, }) } }