summaryrefslogtreecommitdiff
path: root/src/diagnostics/html_tag.rs
blob: 8cf7eb01734ad62e877977b696a3f293e9a765e7 (plain)
use miette::Diagnostic;
use thiserror::Error;

use crate::{
	diagnostics::AstDiagnostic,
	tokenize::{Span, TokenType},
};

#[derive(Error, Debug, Diagnostic)]
#[error("html tags is not allowed in kuht")]
#[diagnostic(code(HtmlTag), severity(Error))]
pub struct HtmlTag {
	#[label(primary, "invalid html tag")]
	tag: Span,
}

impl AstDiagnostic for HtmlTag {
	fn handle_element(element: &crate::parse::Element<'_>) -> Option<Self> {
		let TokenType::Tag {
			lowercase_tag_name, ..
		} = element.start_tag.ty
		else {
			return None;
		};

		if lowercase_tag_name != "html" {
			return None;
		}

		Some(Self {
			tag: element.start_tag.span,
		})
	}
}