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";