From 0d7210b6d77ff57b55f38d8c9ee15effbfa05603 Mon Sep 17 00:00:00 2001 From: Dylan Piercey Date: Mon, 13 Feb 2023 12:05:12 -0700 Subject: [PATCH] fix: tag variable not terminated on concise mode text delimiter (#150) * fix: tag variable not terminated on concise mode text delimiter --- .changeset/lovely-chefs-pump.md | 5 +++++ .../tag-var-before-concise-text.expected.txt | 11 +++++++++++ .../fixtures/tag-var-before-concise-text/input.marko | 4 ++++ src/__tests__/main.test.ts | 2 +- src/states/OPEN_TAG.ts | 2 ++ 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 .changeset/lovely-chefs-pump.md create mode 100644 src/__tests__/fixtures/tag-var-before-concise-text/__snapshots__/tag-var-before-concise-text.expected.txt create mode 100644 src/__tests__/fixtures/tag-var-before-concise-text/input.marko diff --git a/.changeset/lovely-chefs-pump.md b/.changeset/lovely-chefs-pump.md new file mode 100644 index 00000000..4f953c77 --- /dev/null +++ b/.changeset/lovely-chefs-pump.md @@ -0,0 +1,5 @@ +--- +"htmljs-parser": patch +--- + +Fix issue with tag variable not terminated on concise mode text delimiter diff --git a/src/__tests__/fixtures/tag-var-before-concise-text/__snapshots__/tag-var-before-concise-text.expected.txt b/src/__tests__/fixtures/tag-var-before-concise-text/__snapshots__/tag-var-before-concise-text.expected.txt new file mode 100644 index 00000000..360f1fd3 --- /dev/null +++ b/src/__tests__/fixtures/tag-var-before-concise-text/__snapshots__/tag-var-before-concise-text.expected.txt @@ -0,0 +1,11 @@ +1╭─ style/style -- + │ │ ││ ╰─ openTagEnd + │ │ │╰─ tagVar.value "style" + │ │ ╰─ tagVar "/style" + ╰─ ╰─ tagName "style" +2╭─ header { + ╰─ ╰─ text "\n header {\n color: green\n }\n" +3├─ color: green +4├─ } +5╭─ + ╰─ ╰─ closeTagEnd(style) \ No newline at end of file diff --git a/src/__tests__/fixtures/tag-var-before-concise-text/input.marko b/src/__tests__/fixtures/tag-var-before-concise-text/input.marko new file mode 100644 index 00000000..f0893126 --- /dev/null +++ b/src/__tests__/fixtures/tag-var-before-concise-text/input.marko @@ -0,0 +1,4 @@ +style/style -- + header { + color: green + } diff --git a/src/__tests__/main.test.ts b/src/__tests__/main.test.ts index 6d79a339..db8c450a 100644 --- a/src/__tests__/main.test.ts +++ b/src/__tests__/main.test.ts @@ -176,7 +176,7 @@ for (const entry of fs.readdirSync(FIXTURES)) { onOpenTagEnd(range) { if (range.selfClosed) tagStack.pop(); else - switch (tagStack.at(-1)!.type) { + switch (tagStack[tagStack.length - 1]!.type) { case TagType.statement: case TagType.void: tagStack.pop(); diff --git a/src/states/OPEN_TAG.ts b/src/states/OPEN_TAG.ts index 90242d95..bf4f0962 100644 --- a/src/states/OPEN_TAG.ts +++ b/src/states/OPEN_TAG.ts @@ -478,6 +478,8 @@ function shouldTerminateConciseTagVar(code: number, data: string, pos: number) { case CODE.SEMICOLON: case CODE.OPEN_ANGLE_BRACKET: return true; + case CODE.HYPHEN: + return data.charCodeAt(pos + 1) === CODE.HYPHEN; case CODE.COLON: return data.charCodeAt(pos + 1) === CODE.EQUAL; default: