diff --git a/.changeset/fix-svelte-control-flow-use-import-type.md b/.changeset/fix-svelte-control-flow-use-import-type.md new file mode 100644 index 000000000000..bd9f52b6cf06 --- /dev/null +++ b/.changeset/fix-svelte-control-flow-use-import-type.md @@ -0,0 +1,5 @@ +--- +"@biomejs/biome": patch +--- + +Fixed [#9098](https://github.com/biomejs/biome/issues/9098): `useImportType` no longer incorrectly flags imports used in Svelte control flow blocks (`{#if}`, `{#each}`, `{#await}`, `{#key}`) as type-only imports. diff --git a/crates/biome_cli/tests/cases/handle_svelte_files.rs b/crates/biome_cli/tests/cases/handle_svelte_files.rs index 9a4f8afa9808..77b9bde62a58 100644 --- a/crates/biome_cli/tests/cases/handle_svelte_files.rs +++ b/crates/biome_cli/tests/cases/handle_svelte_files.rs @@ -873,16 +873,16 @@ let isChecked = false;
- + - +
Active
- +
Styled
- +

{inputValue}

{isChecked}

@@ -957,3 +957,72 @@ fn no_comma_operator_triggered_in_svelte_template_expression() { result, )); } + +#[test] +fn use_import_type_not_triggered_for_enum_in_control_flow_blocks() { + let fs = MemoryFileSystem::default(); + let mut console = BufferConsole::default(); + + fs.insert( + "biome.json".into(), + r#"{ "html": { "linter": {"enabled": true}, "experimentalFullSupportEnabled": true } }"# + .as_bytes(), + ); + + let file = Utf8Path::new("file.svelte"); + // the code in this file is intentionally ridiculous and doesn't necessarily make sense, but it covers a lot of different control flow blocks in one test + fs.insert( + file.into(), + r#" + +{#if foo === IfEnum.private} + private +{:else if foo === ElseIfEnum.public} + public +{/if} + +{#each EachEnum.Foo as item (EachKeyEnum[item])} + {item.name} +{/each} + +{#key KeyEnum.Foo} + +{/key} + +{#await AwaitEnum.Foo} + loading +{:then data} + {data} +{/await} +"# + .as_bytes(), + ); + + let (fs, result) = run_cli( + fs, + &mut console, + Args::from(["lint", "--only=useImportType", file.as_str()].as_slice()), + ); + + assert!(result.is_ok(), "run_cli returned {result:?}"); + + assert_cli_snapshot(SnapshotPayload::new( + module_path!(), + "use_import_type_not_triggered_for_enum_in_control_flow_blocks", + fs, + console, + result, + )); +} diff --git a/crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/no_unused_variables_in_svelte_directives.snap b/crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/no_unused_variables_in_svelte_directives.snap index 1f9e96954533..0373d2da308b 100644 --- a/crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/no_unused_variables_in_svelte_directives.snap +++ b/crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/no_unused_variables_in_svelte_directives.snap @@ -26,16 +26,16 @@ let isChecked = false;
- + - +
Active
- +
Styled
- +

{inputValue}

{isChecked}

diff --git a/crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/use_import_type_not_triggered_for_enum_in_control_flow_blocks.snap b/crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/use_import_type_not_triggered_for_enum_in_control_flow_blocks.snap new file mode 100644 index 000000000000..430a9bd6fb6e --- /dev/null +++ b/crates/biome_cli/tests/snapshots/main_cases_handle_svelte_files/use_import_type_not_triggered_for_enum_in_control_flow_blocks.snap @@ -0,0 +1,59 @@ +--- +source: crates/biome_cli/tests/snap_test.rs +expression: redactor(content) +--- +## `biome.json` + +```json +{ + "html": { + "linter": { "enabled": true }, + "experimentalFullSupportEnabled": true + } +} +``` + +## `file.svelte` + +```svelte + + +{#if foo === IfEnum.private} + private +{:else if foo === ElseIfEnum.public} + public +{/if} + +{#each EachEnum.Foo as item (EachKeyEnum[item])} + {item.name} +{/each} + +{#key KeyEnum.Foo} + +{/key} + +{#await AwaitEnum.Foo} + loading +{:then data} + {data} +{/await} + +``` + +# Emitted Messages + +```block +Checked 1 file in