Skip to content

Commit 1784026

Browse files
authored
fix: don't require commas between warnings in legacy mode (#11669)
also add commas in migration closes #11666
1 parent c70533a commit 1784026

File tree

5 files changed

+49
-15
lines changed

5 files changed

+49
-15
lines changed

.changeset/twelve-beans-drive.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"svelte": patch
3+
---
4+
5+
fix: don't require warning codes to be separated by commas in non-runes mode

packages/svelte/src/compiler/utils/extract_svelte_ignore.js

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,16 @@ export function extract_svelte_ignore(offset, text, runes) {
3131
/** @type {string[]} */
3232
const ignores = [];
3333

34-
// Warnings have to be separated by commas, everything after is interpreted as prose
35-
for (const match of text.slice(length).matchAll(/([\w$-]+)(,)?/gm)) {
36-
const code = match[1];
34+
if (runes) {
35+
// Warnings have to be separated by commas, everything after is interpreted as prose
36+
for (const match of text.slice(length).matchAll(/([\w$-]+)(,)?/gm)) {
37+
const code = match[1];
3738

38-
ignores.push(code);
39+
if (w.codes.includes(code)) {
40+
ignores.push(code);
41+
} else {
42+
const replacement = replacements[code] ?? code.replace(/-/g, '_');
3943

40-
if (!w.codes.includes(code)) {
41-
const replacement = replacements[code] ?? code.replace(/-/g, '_');
42-
43-
if (runes) {
4444
// The type cast is for some reason necessary to pass the type check in CI
4545
const start = offset + /** @type {number} */ (match.index);
4646
const end = start + code.length;
@@ -51,13 +51,26 @@ export function extract_svelte_ignore(offset, text, runes) {
5151
const suggestion = fuzzymatch(code, w.codes);
5252
w.unknown_code({ start, end }, code, suggestion);
5353
}
54-
} else if (w.codes.includes(replacement)) {
55-
ignores.push(replacement);
54+
}
55+
56+
if (!match[2]) {
57+
break;
5658
}
5759
}
60+
} else {
61+
// Non-runes mode: lax parsing, backwards compat with old codes
62+
for (const match of text.slice(length).matchAll(/[\w$-]+/gm)) {
63+
const code = match[0];
64+
65+
ignores.push(code);
66+
67+
if (!w.codes.includes(code)) {
68+
const replacement = replacements[code] ?? code.replace(/-/g, '_');
5869

59-
if (!match[2]) {
60-
break;
70+
if (w.codes.includes(replacement)) {
71+
ignores.push(replacement);
72+
}
73+
}
6174
}
6275
}
6376

@@ -76,8 +89,12 @@ export function migrate_svelte_ignore(text) {
7689
const length = match[0].length;
7790
return (
7891
text.substring(0, length) +
79-
text
80-
.substring(length)
81-
.replace(/\w+-\w+(-\w+)*/g, (code) => replacements[code] ?? code.replace(/-/g, '_'))
92+
text.substring(length).replace(/\w+-\w+(-\w+)*/g, (code, _, idx) => {
93+
let replacement = replacements[code] ?? code.replace(/-/g, '_');
94+
if (/\w+-\w+/.test(text.substring(length + idx + code.length))) {
95+
replacement += ',';
96+
}
97+
return replacement;
98+
})
8299
);
83100
}

packages/svelte/tests/migrate/samples/svelte-ignore/input.svelte

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@
66
</script>
77

88
<!-- svelte-ignore a11y-something-something -->
9+
<div></div>
10+
11+
<!-- svelte-ignore a11y-something-something a11y-something-something2 -->
912
<div></div>

packages/svelte/tests/migrate/samples/svelte-ignore/output.svelte

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@
66
</script>
77

88
<!-- svelte-ignore a11y_something_something -->
9+
<div></div>
10+
11+
<!-- svelte-ignore a11y_something_something, a11y_something_something2 -->
912
<div></div>

packages/svelte/tests/validator/samples/ignore-warning-dash-backwards-compat/input.svelte

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,9 @@
1212

1313
<!-- svelte-ignore a11y-misplaced-scope -->
1414
<div scope></div>
15+
16+
<!-- svelte-ignore a11y-missing-attribute a11y-misplaced-scope -->
17+
<div>
18+
<img src="this-is-fine.jpg">
19+
<div scope></div>
20+
</div>

0 commit comments

Comments
 (0)