summaryrefslogtreecommitdiff
path: root/src/diagnostics/too_many_equal_signs.rs
blob: b20cb839a364de6b3c8383ea69ef247b460d6050 (plain)
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<Self> {
		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,
			},
		})
	}
}