Skip to content

@typescript-eslint/no-confusing-void-expression conflicts with snippet/render in the same file #16664

@KieranP

Description

@KieranP

Describe the bug

When a snippet is defined in the same Svelte component as the render call, the @typescript-eslint/no-confusing-void-expression ESLint rule throws the following error:

Image

However, when a snippet is defined outside of the component, such as children, @render has no issues with it. For some reason, snippets defined in the component are typed differently than snippets defined outside and passed in via props.

The main difference I see is that the inline snippets type is ReturnType<import("svelte").Snippet> whereas children prop type is Snippet. Because the #snippet/@render is compiled and syntax specific, I have not found a way to disable the rule or work around it, e.g. this is not possible because the svelte compiler doesn't support type declarations in the #snippet call:

<script lang="ts">
  import type { Snippet } from 'svelte'
</script>

{#snippet heading(label: string): Snippet}
  <h1>{label}</h1>
{/snippet}

{@render heading('Welcome!')}

Reproduction

Install eslint and @typescript-eslint/eslint-plugin, enable the rule @typescript-eslint/no-confusing-void-expression, then use this snippet in a Svelte file:

{#snippet heading(label: string)}
  <h1>{label}</h1>
{/snippet}

{@render heading('Welcome!')}

Logs

System Info

System:
    OS: macOS 15.6.1
    CPU: (14) arm64 Apple M4 Pro
    Memory: 1.19 GB / 24.00 GB
    Shell: 5.9 - /bin/zsh
  Binaries:
    Node: 22.15.1 - ~/.asdf/installs/nodejs/22.15.1/bin/node
    Yarn: 4.9.3 - ~/.asdf/installs/nodejs/22.15.1/bin/yarn
    npm: 10.9.2 - ~/.asdf/plugins/nodejs/shims/npm
  Browsers:
    Brave Browser: 139.1.81.136
    Chrome: 139.0.7258.139
    Safari: 18.6
  npmPackages:
    svelte: ^5.38.3 => 5.38.3

Severity

annoyance

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions