swc-project/swc · error · swc_xml_parser::error::Error
OpeningAndEndingTagMismatch
OpeningAndEndingTagMismatch
Error message
Opening and ending tag mismatch
What it means
XML parser error in Phase::Main: an end tag (or empty-tag close) does not match the currently open element on the stack of open elements — the closing name differs from the element being closed, so opening and ending tags mismatch.
Source
Thrown at crates/swc_xml_parser/src/parser/mod.rs:324
},
Phase::MainPhase => match &token_and_info.token {
Token::Character { .. } => {
self.append_character_to_current_element(token_and_info)?;
}
Token::StartTag { .. } => {
let element = self.create_element_for_token(token_and_info.clone());
self.append_node(self.get_current_element(), element.clone());
self.open_elements_stack.items.push(element);
}
Token::EmptyTag { .. } => {
let element = self.create_element_for_token(token_and_info.clone());
self.append_node(self.get_current_element(), element);
}
Token::EndTag { tag_name, .. } => {
if get_tag_name!(self.get_current_element()) != tag_name {
self.errors.push(Error::new(
token_and_info.span,
ErrorKind::OpeningAndEndingTagMismatch,
));
}
let is_closed = self
.open_elements_stack
.items
.iter()
.rev()
.any(|node| get_tag_name!(node) == tag_name);
if is_closed {
let popped = self
.open_elements_stack
.pop_until_tag_name_popped(&[tag_name]);
self.update_end_tag_span(popped.as_ref(), token_and_info.span);View on GitHub (pinned to 5176682b65)
Solutions
- Make the end tag name match its start tag exactly (case-sensitive)
- Fix or remove improperly nested/mismatched tags
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at crates/swc_xml_parser/src/parser/mod.rs:324 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of swc-project/swc@5176682b65 (2026-08-17).
Data as JSON: /api/errors/30aa9d4353907ff4.
Report an issue: GitHub.