diff --git a/src/compiler/parse/index.ts b/src/compiler/parse/index.ts index b10bab35f3..52795c02a9 100644 --- a/src/compiler/parse/index.ts +++ b/src/compiler/parse/index.ts @@ -8,7 +8,7 @@ import error from '../utils/error'; type ParserState = (parser: Parser) => (ParserState | void); -interface LastAutoCloseTag { +interface LastAutoClosedTag { tag: string; reason: string; depth: number; @@ -26,7 +26,7 @@ export class Parser { css: Style[] = []; js: Script[] = []; meta_tags = {}; - last_auto_closed_tag?: LastAutoCloseTag; + last_auto_closed_tag?: LastAutoClosedTag; constructor(template: string, options: ParserOptions) { if (typeof template !== 'string') { diff --git a/src/compiler/parse/state/tag.ts b/src/compiler/parse/state/tag.ts index c04429ab91..311bf852e2 100644 --- a/src/compiler/parse/state/tag.ts +++ b/src/compiler/parse/state/tag.ts @@ -134,16 +134,12 @@ export default function tag(parser: Parser) { // close any elements that don't have their own closing tags, e.g.

while (parent.name !== name) { if (parent.type !== 'Element') { - if (parser.last_auto_closed_tag && parser.last_auto_closed_tag.tag === name) { - parser.error({ - code: `invalid-closing-tag`, - message: `<${parser.last_auto_closed_tag.tag}> cannot have child element <${parser.last_auto_closed_tag.reason}>`, - }, start); - } - + const message = parser.last_auto_closed_tag && parser.last_auto_closed_tag.tag === name + ? ` attempted to close <${name}> that was already automatically closed by <${parser.last_auto_closed_tag.reason}>` + : ` attempted to close an element that was not open`; parser.error({ code: `invalid-closing-tag`, - message: ` attempted to close an element that was not open` + message }, start); } @@ -164,7 +160,7 @@ export default function tag(parser: Parser) { } else if (closing_tag_omitted(parent.name, name)) { parent.end = start; parser.stack.pop(); - parser.last_auto_closed_tag ={ + parser.last_auto_closed_tag = { tag: parent.name, reason: name, depth: parser.stack.length, diff --git a/test/parser/samples/error-unmatched-closing-tag-autoclose/error.json b/test/parser/samples/error-unmatched-closing-tag-autoclose/error.json index cfd7fd8aa8..e6532d747e 100644 --- a/test/parser/samples/error-unmatched-closing-tag-autoclose/error.json +++ b/test/parser/samples/error-unmatched-closing-tag-autoclose/error.json @@ -1,6 +1,6 @@ { "code": "invalid-closing-tag", - "message": "

cannot have child element

",
+	"message": "

attempted to close

that was already automatically closed by

",
 	"pos": 24,
 	"start": {
 		"character": 24,