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

  1. Make the end tag name match its start tag exactly (case-sensitive)
  2. 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.