diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/Issue9543Component.svelte b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/Issue9543Component.svelte new file mode 100644 index 000000000000..78399809d748 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/Issue9543Component.svelte @@ -0,0 +1,6 @@ + + + +
{value}
diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/Issue9543Component.svelte.snap b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/Issue9543Component.svelte.snap new file mode 100644 index 000000000000..a81026d16f00 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/Issue9543Component.svelte.snap @@ -0,0 +1,14 @@ +--- +source: crates/biome_js_analyze/tests/spec_tests.rs +expression: Issue9543Component.svelte +--- +# Input +```svelte + + + +
{value}
+ +``` diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue-9543-reexport.ts b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue-9543-reexport.ts new file mode 100644 index 000000000000..2cc922325f80 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue-9543-reexport.ts @@ -0,0 +1 @@ +export { default as Thing } from "./Issue9543Component.svelte"; diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue-9543-reexport.ts.snap b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue-9543-reexport.ts.snap new file mode 100644 index 000000000000..1a4cef28a9d5 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/issue-9543-reexport.ts.snap @@ -0,0 +1,9 @@ +--- +source: crates/biome_js_analyze/tests/spec_tests.rs +expression: issue-9543-reexport.ts +--- +# Input +```ts +export { default as Thing } from "./Issue9543Component.svelte"; + +``` diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/valid-issue-9543.svelte b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/valid-issue-9543.svelte new file mode 100644 index 000000000000..6a9963971758 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/valid-issue-9543.svelte @@ -0,0 +1,7 @@ + + + + + diff --git a/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/valid-issue-9543.svelte.snap b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/valid-issue-9543.svelte.snap new file mode 100644 index 000000000000..e222976ff8b1 --- /dev/null +++ b/crates/biome_js_analyze/tests/specs/correctness/noUnusedImports/valid-issue-9543.svelte.snap @@ -0,0 +1,15 @@ +--- +source: crates/biome_js_analyze/tests/spec_tests.rs +expression: valid-issue-9543.svelte +--- +# Input +```svelte + + + + + + +``` diff --git a/crates/biome_service/src/workspace/document/services/embedded_bindings.rs b/crates/biome_service/src/workspace/document/services/embedded_bindings.rs index a93d978d5e15..b4b07ef9dfd6 100644 --- a/crates/biome_service/src/workspace/document/services/embedded_bindings.rs +++ b/crates/biome_service/src/workspace/document/services/embedded_bindings.rs @@ -96,19 +96,19 @@ impl EmbeddedBuilder { fn visit_js_import(&mut self, import: JsImport) -> Option<()> { let clause = import.import_clause().ok()?; if let Some(named_specifiers) = clause.named_specifiers() { - let imported_names = named_specifiers - .specifiers() - .iter() - .flatten() - .map(|specifier| specifier.imported_name()); - - for imported_name in imported_names { - let Some(imported_name) = imported_name else { + for specifier in named_specifiers.specifiers().iter().flatten() { + let Some(local_name) = specifier.local_name() else { + continue; + }; + let Some(local_name) = local_name.as_js_identifier_binding() else { + continue; + }; + let Ok(local_name) = local_name.name_token() else { continue; }; self.js_bindings.insert( - imported_name.text_trimmed_range(), - imported_name.token_text_trimmed(), + local_name.text_trimmed_range(), + local_name.token_text_trimmed(), ); } } @@ -497,6 +497,20 @@ let variable = "salut"; assert!(contains_binding(&service, "variable")); } + #[test] + fn tracks_renamed_named_imports_by_local_name() { + let source = r#"import { Thing as Something } from "somewhere";"#; + + let mut service = EmbeddedExportedBindings::default(); + let mut builder = service.builder(); + visit_js_root(&mut builder, &parse_js(source)); + + service.finish(builder); + + assert!(contains_binding(&service, "Something")); + assert!(!contains_binding(&service, "Thing")); + } + #[test] fn tracks_import_and_binding_patterns() { let source = r#"import { Component } from "somewhere";