tweak-parser
Rich Harris 3 days ago
parent 2e29c87cc9
commit ceacc7fa46

@ -92,6 +92,13 @@ export function parse_expression_at(parser, source, index) {
add_comments(ast);
let end = ast.end;
const last_comment = parser.root.comments.at(-1);
if (last_comment && last_comment.end > end) end = last_comment.end;
parser.index = end;
return ast;
} catch (e) {
handle_parse_error(e);

@ -60,6 +60,8 @@ export default function read_pattern(parser) {
expression.end = expression.typeAnnotation.end;
}
parser.index = expression.end;
return expression;
}

@ -36,13 +36,6 @@ export default function read_expression(parser, opening_token, disallow_loose) {
try {
const node = parse_expression_at(parser, parser.template, parser.index);
let index = /** @type {number} */ (node.end);
const last_comment = parser.root.comments.at(-1);
if (last_comment && last_comment.end > index) index = last_comment.end;
parser.index = index;
return /** @type {Expression} */ (remove_parens(node));
} catch (err) {
// If we are in an each loop we need the error to be thrown in cases like

@ -387,14 +387,20 @@ function open(parser) {
parser.eat(')', true);
}
const prelude = parser.template.slice(0, params_start).replace(/\S/g, ' ');
const params = parser.template.slice(params_start, parser.index);
/** @type {Pattern[]} */
let params = [];
let function_expression = matched
? /** @type {ArrowFunctionExpression} */ (
parse_expression_at(parser, prelude + `${params} => {}`, params_start)
)
: { params: [] };
if (matched) {
const prelude = parser.template.slice(0, params_start).replace(/\S/g, ' ');
const params_string = parser.template.slice(params_start, parser.index);
const fn = /** @type {ArrowFunctionExpression} */ (
parse_expression_at(parser, prelude + `${params_string} => {}`, params_start)
);
params = fn.params;
parser.index -= 6;
}
parser.allow_whitespace();
parser.eat('}', true);
@ -406,7 +412,7 @@ function open(parser) {
end: -1,
expression: id,
typeParams: type_params,
parameters: function_expression.params,
parameters: params,
body: create_fragment(),
metadata: {
can_hoist: false,

Loading…
Cancel
Save