pull/17954/merge
Julia Cavazos-England 2 days ago committed by GitHub
commit d913773c83
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

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

@ -94,7 +94,7 @@ export function parse_expression_at(parser, source, index) {
return ast;
} catch (e) {
handle_parse_error(e);
handle_parse_error(e, source, parser.ts);
}
}
@ -132,10 +132,19 @@ const regex_position_indicator = / \(\d+:\d+\)$/;
/**
* @param {any} err
* @param {string} [source]
* @param {boolean} [typescript]
* @returns {never}
*/
function handle_parse_error(err) {
e.js_parse_error(err.pos, err.message.replace(regex_position_indicator, ''));
function handle_parse_error(err, source, typescript) {
let message = /** @type {string} */ (err.message).replace(regex_position_indicator, '');
let pos = /** @type {number} */ (err.pos);
if (!typescript && source && source[pos] === ':') {
message += ` (did you forget to add \`lang="ts"\`?)`;
}
e.js_parse_error(pos, message);
}
/**

@ -43,6 +43,22 @@ export default function read_expression(parser, opening_token, disallow_loose) {
parser.index = index;
if (!parser.ts) {
let j = parser.index;
while (j < parser.template.length && regex_whitespace.test(parser.template[j])) j++;
const remaining = parser.template.slice(j);
if (
remaining[0] === ':' ||
/^satisfies[\s(]/.test(remaining) ||
(remaining[0] === '!' && remaining[1] !== '=') ||
(/^as[\s(]/.test(remaining) && !disallow_loose)
) {
e.js_parse_error(j, `Unexpected token (did you forget to add \`lang="ts"\`?)`);
}
}
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

@ -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]
}
});

@ -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: [3, 3]
}
});

@ -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: [14, 14]
}
});

@ -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: [2, 2]
}
});

@ -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: [2, 2]
}
});

@ -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: [3, 3]
}
});
Loading…
Cancel
Save