From 30e066ca593d58c953c557579e6ecb40fa282d48 Mon Sep 17 00:00:00 2001 From: dpiercey Date: Fri, 8 Aug 2025 16:01:54 -0700 Subject: [PATCH] fix: arrow function parsing in type expressions --- .changeset/nine-dragons-shake.md | 5 +++++ .../__snapshots__/ts-type-statement.expected.txt | 6 ++++++ src/__tests__/fixtures/ts-type-statement/input.marko | 4 ++++ src/states/EXPRESSION.ts | 4 ++-- 4 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 .changeset/nine-dragons-shake.md diff --git a/.changeset/nine-dragons-shake.md b/.changeset/nine-dragons-shake.md new file mode 100644 index 00000000..2adc5106 --- /dev/null +++ b/.changeset/nine-dragons-shake.md @@ -0,0 +1,5 @@ +--- +"htmljs-parser": patch +--- + +Fix arrow function parsing in type expressions. diff --git a/src/__tests__/fixtures/ts-type-statement/__snapshots__/ts-type-statement.expected.txt b/src/__tests__/fixtures/ts-type-statement/__snapshots__/ts-type-statement.expected.txt index 95dcb1ff..597252f3 100644 --- a/src/__tests__/fixtures/ts-type-statement/__snapshots__/ts-type-statement.expected.txt +++ b/src/__tests__/fixtures/ts-type-statement/__snapshots__/ts-type-statement.expected.txt @@ -28,4 +28,10 @@ 21├─ 2 22├─ > = baz; 23╭─ + ╰─ ╰─ openTagEnd +24╭─ export interface Foo { + ╰─ ╰─ tagName "export" +25├─ bar: () => Baz; +26├─ } +27╭─ ╰─ ╰─ openTagEnd \ No newline at end of file diff --git a/src/__tests__/fixtures/ts-type-statement/input.marko b/src/__tests__/fixtures/ts-type-statement/input.marko index b5442ea0..535d6fe1 100644 --- a/src/__tests__/fixtures/ts-type-statement/input.marko +++ b/src/__tests__/fixtures/ts-type-statement/input.marko @@ -20,3 +20,7 @@ static const x: Foo< 1, 2 > = baz; + +export interface Foo { + bar: () => Baz; +} diff --git a/src/states/EXPRESSION.ts b/src/states/EXPRESSION.ts index fbcdc118..ca0f6a61 100644 --- a/src/states/EXPRESSION.ts +++ b/src/states/EXPRESSION.ts @@ -144,10 +144,10 @@ export const EXPRESSION: StateDefinition = { } break; case CODE.EQUAL: - if (expression.operators && !expression.groupStack.length) { + if (expression.operators) { if (this.lookAtCharCodeAhead(1) === CODE.CLOSE_ANGLE_BRACKET) { this.pos++; - } else if (!expression.forceType) { + } else if (!(expression.forceType || expression.groupStack.length)) { expression.inType = false; }