From 0a61385aa9264ced4774a87625d482fe035297b2 Mon Sep 17 00:00:00 2001 From: Nic <162764842+Nic-Polumeyv@users.noreply.github.com> Date: Sat, 5 Sep 2026 19:54:27 -0400 Subject: [PATCH] parse with teasel instead of acorn --- packages/svelte/package.json | 4 +- .../src/compiler/phases/1-parse/acorn.js | 289 --------- .../src/compiler/phases/1-parse/index.js | 16 +- .../svelte/src/compiler/phases/1-parse/js.js | 132 ++++ .../compiler/phases/1-parse/read/context.js | 95 +-- .../phases/1-parse/read/expression.js | 44 +- .../compiler/phases/1-parse/read/script.js | 4 +- .../src/compiler/phases/1-parse/state/tag.js | 120 +--- .../src/compiler/phases/2-analyze/index.js | 2 +- packages/svelte/src/compiler/phases/scope.js | 2 +- .../samples/javascript-comments/output.json | 564 +++++++++++++----- .../samples/script-comment-only/output.json | 20 +- .../output.json | 44 +- .../parser-modern/samples/parens/output.json | 18 +- .../script-style-no-markup/output.json | 20 +- .../output.json | 16 +- pnpm-lock.yaml | 21 +- 17 files changed, 728 insertions(+), 683 deletions(-) delete mode 100644 packages/svelte/src/compiler/phases/1-parse/acorn.js create mode 100644 packages/svelte/src/compiler/phases/1-parse/js.js diff --git a/packages/svelte/package.json b/packages/svelte/package.json index 53e5516bf6..b44c2fcda5 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -165,6 +165,7 @@ "esbuild": "^0.28.1", "rollup": "^4.59.0", "source-map": "^0.7.4", + "acorn": "^8.18.0", "tinyglobby": "^0.2.12", "typescript": "^5.5.4", "vitest": "^4.1.7", @@ -173,9 +174,8 @@ "dependencies": { "@jridgewell/remapping": "^2.3.5", "@jridgewell/sourcemap-codec": "^1.6.0", - "@sveltejs/acorn-typescript": "^1.0.13", + "@teasel/parser": "link:../../../teasel/bindings/node", "@types/estree": "^1.0.9", - "acorn": "^8.18.0", "aria-query": "5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", diff --git a/packages/svelte/src/compiler/phases/1-parse/acorn.js b/packages/svelte/src/compiler/phases/1-parse/acorn.js deleted file mode 100644 index add61ea19f..0000000000 --- a/packages/svelte/src/compiler/phases/1-parse/acorn.js +++ /dev/null @@ -1,289 +0,0 @@ -/** @import { Comment, Program, Statement } from 'estree' */ -/** @import { AST } from '#compiler' */ -/** @import { Parser } from './index.js' */ -import * as acorn from 'acorn'; -import { walk } from 'zimmerframe'; -import { tsPlugin } from '@sveltejs/acorn-typescript'; -import * as e from '../../errors.js'; -import { locator } from '../../state.js'; - -const JSParser = acorn.Parser; -const TSParser = JSParser.extend(tsPlugin()); - -/** - * @typedef {Comment & { - * start: number; - * end: number; - * }} CommentWithLocation - */ - -/** - * @param {string} source - * @param {AST.JSComment[]} comments - * @param {boolean} typescript - * @param {boolean} [is_script] - */ -export function parse(source, comments, typescript, is_script) { - const acorn = typescript ? TSParser : JSParser; - - const { onComment, add_comments } = get_comment_handlers( - source, - /** @type {CommentWithLocation[]} */ (comments) - ); - - // @ts-expect-error - const parse_statement = acorn.prototype.parseStatement; - - // If we're dealing with a