Prettier plugin hangs on <script> with some particular attributes
Prettier plugin hangs on svelte file containing <script> tag with particular set of attributes.
This issue seems to be quite important, because it hangs everywhere -- on CI/CD systems, on pre-commit hooks, in editor. I can't find a way to work it around: even with <!-- prettier-ignore-start --> it hangs, and the only way I see is to add the component into .prettierignore (but this file seems to be ignored by pre-commit hooks).
I noticed it because it was failing on this file.
Finally I was able to make a minimal reproduction.
First reproduction -- it hangs:
<script
defer
src='fds'
on:load={() => {}}
>
</script>
Second reproduction -- it returns "Expected >" error on the fourth line
<script
defer
src='fds'
on:load={() => {}}
>
</script>
[error] src/routes/Matomo.svelte: Expected >
[error] 2 | defer
[error] 3 | src='fds'
[error] > 4 | on:load={() => {}}
[error] | ^
It does not hangs nor returns error if any of attributes are missing.
Reproduction
- Create a Svelte component file or check out existing one
<script
defer
src='fds'
on:load={() => {}}
>
</script>
- Run Prettier on it.
Expected behavior
It should never hang, because it is bad for CI/CD, pre-commit hooks, editors etc.
System and dependencies
- OS: macOS 14.4.1 (23E224), intel
- "prettier": "3.2.5",
- "prettier-plugin-svelte": "3.2.3",
export default {
plugins: [
'prettier-plugin-svelte',
],
printWidth: 80,
semi: false,
bracketSameLine: false,
singleAttributePerLine: false,
overrides: [{ files: '*.svelte', options: { parser: 'svelte' } }],
}
I found that it also happens on svelte-check: https://github.com/sveltejs/language-tools/issues/2363 So this is probably a problem in language-tools.
I added the reproduction repository https://github.com/shadow-identity/sveltejs-language-tools-issues-2363
Could be related to https://github.com/sveltejs/svelte/issues/9564