sveltejs / prettier-plugin-svelte

Format your svelte components using prettier.
MIT License
714 stars 95 forks source link

Prettier plugin hangs on <script> with some particular attributes #440

Closed shadow-identity closed 3 weeks ago

shadow-identity commented 1 month ago

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

This reproduction results in hanging.

  1. Check out repository: https://github.com/shadow-identity/sveltejs-language-tools-issues-2363
  2. Install dependencies
  3. 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

export default {
    plugins: [
        'prettier-plugin-svelte',
    ],
    printWidth: 80,
    semi: false,
    bracketSameLine: false,
    singleAttributePerLine: false,
    overrides: [{ files: '*.svelte', options: { parser: 'svelte' } }],
}
shadow-identity commented 1 month ago

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.

shadow-identity commented 1 month ago

I added the reproduction repository https://github.com/shadow-identity/sveltejs-language-tools-issues-2363

shadow-identity commented 1 month ago

Could be related to https://github.com/sveltejs/svelte/issues/9564