pull/17954/merge
Julia Cavazos-England 5 days ago committed by GitHub
commit 75e3cd8165
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"`

@ -96,7 +96,7 @@ export function parse_expression_at(parser, source, index) {
return ast; return ast;
} catch (e) { } catch (e) {
handle_parse_error(e); handle_parse_error(e, source, parser.ts);
} }
} }
@ -166,10 +166,19 @@ const regex_position_indicator = / \(\d+:\d+\)$/;
/** /**
* @param {any} err * @param {any} err
* @param {string} [source]
* @param {boolean} [typescript]
* @returns {never} * @returns {never}
*/ */
function handle_parse_error(err) { function handle_parse_error(err, source, typescript) {
e.js_parse_error(err.pos, err.message.replace(regex_position_indicator, '')); 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);
} }
/** /**

@ -50,6 +50,22 @@ export default function read_expression(parser, opening_token, disallow_loose) {
parser.index = index; 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)); return /** @type {Expression} */ (remove_parens(node));
} catch (err) { } catch (err) {
// If we are in an each loop we need the error to be thrown in cases like // 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