prettier-plugin-svelte icon indicating copy to clipboard operation
prettier-plugin-svelte copied to clipboard

Prettier plugin hangs on <script> with some particular attributes

Open shadow-identity opened this issue 1 year ago • 1 comments

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

  1. Create a Svelte component file or check out existing one
    <script
        defer
        src='fds'
        on:load={() => {}}
    >
    </script>
  1. 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' } }],
}

shadow-identity avatar May 03 '24 11:05 shadow-identity

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 avatar May 03 '24 14:05 shadow-identity

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

shadow-identity avatar May 22 '24 12:05 shadow-identity

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

shadow-identity avatar May 31 '24 16:05 shadow-identity