fix: better error for TS annotations in snippets without lang="ts"

pull/17954/head
Julia 6 months ago
parent 7ec156a7b0
commit 9d0edf720e

@ -0,0 +1,5 @@
---
'svelte': patch
---
Improve error message when TypeScript syntax is used in snippet parameters without `lang="ts"`

@ -177,10 +177,11 @@ export class Parser {
/**
* @param {any} err
* @param {string} [suffix]
* @returns {never}
*/
acorn_error(err) {
e.js_parse_error(err.pos, err.message.replace(regex_position_indicator, ''));
acorn_error(err, suffix = '') {
e.js_parse_error(err.pos, err.message.replace(regex_position_indicator, '') + suffix);
}
/**

@ -390,16 +390,28 @@ function open(parser) {
const prelude = parser.template.slice(0, params_start).replace(/\S/g, ' ');
const params = parser.template.slice(params_start, parser.index);
let function_expression = matched
? /** @type {ArrowFunctionExpression} */ (
let function_expression;
if (matched) {
try {
function_expression = /** @type {ArrowFunctionExpression} */ (
parse_expression_at(
prelude + `${params} => {}`,
parser.root.comments,
parser.ts,
params_start
)
)
: { params: [] };
);
} catch (/** @type {any} */ err) {
const suffix =
!parser.ts && parser.template[err.pos] === ':'
? ` (did you forget to add \`lang="ts"\`?)`
: '';
parser.acorn_error(err, suffix);
}
} else {
function_expression = { params: [] };
}
parser.allow_whitespace();
parser.eat('}', true);

@ -0,0 +1,9 @@
import { test } from '../../test';
export default test({
error: {
code: 'js_parse_error',
message: 'Unexpected token (did you forget to add `lang="ts"`?)',
position: [18, 18]
}
});
Loading…
Cancel
Save