diff options
Diffstat (limited to 'src/diagnostics/empty_tag_name.rs')
| -rw-r--r-- | src/diagnostics/empty_tag_name.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/diagnostics/empty_tag_name.rs b/src/diagnostics/empty_tag_name.rs new file mode 100644 index 0000000..e8fdb07 --- /dev/null +++ b/src/diagnostics/empty_tag_name.rs @@ -0,0 +1,32 @@ +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 }) + } +} |
