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
+ ? `${name}> attempted to close <${name}> that was already automatically closed by <${parser.last_auto_closed_tag.reason}>`
+ : `${name}> attempted to close an element that was not open`;
parser.error({
code: `invalid-closing-tag`,
- message: `${name}> 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,