summaryrefslogtreecommitdiff
path: root/src/diagnostics/empty_tag_name.rs
blob: e8fdb077643209ba03754e986f22c2e21b91c8b4 (plain)
use miette::Diagnostic;
use thiserror::Error;

use crate::{
	diagnostics::TokenDiagnostic,
	tokenize::{Span, Token, TokenType},
};

#[derive(Error, Debug, Diagnostic)]
#[error("Tag names must be alphabetic")]
#[diagnostic(code(EmptyTagName), severity(Error))]
pub struct EmptyTagName {
	#[label(primary, "all tags must have a name")]
	tag: Span,
}

impl TokenDiagnostic for EmptyTagName {
	fn handle_token(token: &Token<'_>) -> Option<Self> {
		let TokenType::Tag {
			lowercase_tag_name, ..
		} = token.ty
		else {
			return None;
		};

		if !lowercase_tag_name.is_empty() {
			return None;
		}

		Some(Self { tag: token.span })
	}
}