From a8d79ffbd83735853854ab6ce42c95cdeade8ccb Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 7 Apr 2026 18:43:46 -0400 Subject: [PATCH] tidy up --- .../phases/1-parse/read/expression.js | 25 +++++++------------ .../src/compiler/phases/1-parse/state/tag.js | 5 ++-- .../compiler/phases/1-parse/utils/bracket.js | 7 +++--- 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/packages/svelte/src/compiler/phases/1-parse/read/expression.js b/packages/svelte/src/compiler/phases/1-parse/read/expression.js index 92010a16ed..f5e7820b9c 100644 --- a/packages/svelte/src/compiler/phases/1-parse/read/expression.js +++ b/packages/svelte/src/compiler/phases/1-parse/read/expression.js @@ -2,26 +2,22 @@ /** @import { Parser } from '../index.js' */ import { parse_expression_at } from '../acorn.js'; import { find_matching_bracket } from '../utils/bracket.js'; +import * as e from '../../../errors.js'; /** * @param {Parser} parser * @param {string} [opening_token] - * @returns {Expression | undefined} + * @returns {Expression} */ export function get_loose_identifier(parser, opening_token) { // Find the next } and treat it as the end of the expression + const start = parser.index; const end = find_matching_bracket(parser.template, parser.index, opening_token ?? '{'); - if (end) { - const start = parser.index; - parser.index = end; - // We don't know what the expression is and signal this by returning an empty identifier - return { - type: 'Identifier', - start, - end, - name: '' - }; - } + + parser.index = end; + + // We don't know what the expression is and signal this by returning an empty identifier + return { type: 'Identifier', start, end, name: '' }; } /** @@ -36,10 +32,7 @@ export default function read_expression(parser, opening_token) { // If we are in an each loop we need the error to be thrown in cases like // `as { y = z }` so we still throw and handle the error there if (parser.loose) { - const expression = get_loose_identifier(parser, opening_token); - if (expression) { - return expression; - } + return get_loose_identifier(parser, opening_token); } throw err; diff --git a/packages/svelte/src/compiler/phases/1-parse/state/tag.js b/packages/svelte/src/compiler/phases/1-parse/state/tag.js index 1d901026a3..e2c9da5df3 100644 --- a/packages/svelte/src/compiler/phases/1-parse/state/tag.js +++ b/packages/svelte/src/compiler/phases/1-parse/state/tag.js @@ -12,8 +12,6 @@ import { match_bracket } from '../utils/bracket.js'; const regex_whitespace_with_closing_curly_brace = /\s*}/y; -const pointy_bois = { '<': '>' }; - /** @param {Parser} parser */ export default function tag(parser) { const start = parser.index; @@ -103,7 +101,8 @@ function open(parser) { } if (end <= start) { - if (parser.loose && (expression = get_loose_identifier(parser))) { + if (parser.loose) { + expression = get_loose_identifier(parser); break; } diff --git a/packages/svelte/src/compiler/phases/1-parse/utils/bracket.js b/packages/svelte/src/compiler/phases/1-parse/utils/bracket.js index 0293c0d9db..19b9d829d5 100644 --- a/packages/svelte/src/compiler/phases/1-parse/utils/bracket.js +++ b/packages/svelte/src/compiler/phases/1-parse/utils/bracket.js @@ -89,7 +89,7 @@ function count_leading_backslashes(string, search_start_index) { * @param {string} template The string to search. * @param {number} index The index to begin the search at. * @param {string} open The opening bracket (ex: `'{'` will search for `'}'`). - * @returns {number | undefined} The index of the closing bracket, or undefined if not found. + * @returns {number} The index of the closing bracket */ export function find_matching_bracket(template, index, open) { const close = default_brackets[open]; @@ -131,7 +131,8 @@ export function find_matching_bracket(template, index, open) { } } } - return undefined; + + e.unexpected_eof(template.length); } /** @type {Record} */ @@ -141,8 +142,6 @@ const default_brackets = { '[': ']' }; -const default_close = new Set(Object.values(default_brackets)); - /** * @param {Parser} parser * @param {number} start