From 85c3a10bbe565cff3844561eb13ba70d6ee1b5d3 Mon Sep 17 00:00:00 2001 From: leaysgur <6259812+leaysgur@users.noreply.github.com> Date: Wed, 26 Nov 2025 04:27:13 +0000 Subject: [PATCH] fix(formatter/sort_imports): Handle internal prefixes correctly (#16128) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit | |Before|After| |-|-|-| | `from "@scoped/foo"`| internal (🐛) | external (✨) | | `from "@/foo"` | internal | internal | --- .../sort_imports/compute_metadata.rs | 2 +- .../tests/ir_transform/sort_imports.rs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/crates/oxc_formatter/src/ir_transform/sort_imports/compute_metadata.rs b/crates/oxc_formatter/src/ir_transform/sort_imports/compute_metadata.rs index 6cdcb38d6e7cd..423fd3cd72873 100644 --- a/crates/oxc_formatter/src/ir_transform/sort_imports/compute_metadata.rs +++ b/crates/oxc_formatter/src/ir_transform/sort_imports/compute_metadata.rs @@ -365,7 +365,7 @@ fn to_path_kind(source: &str) -> ImportPathKind { } // TODO: This can be changed via `options.internalPattern` - if source.starts_with('~') || source.starts_with('@') { + if source.starts_with("~/") || source.starts_with("@/") { return ImportPathKind::Internal; } diff --git a/crates/oxc_formatter/tests/ir_transform/sort_imports.rs b/crates/oxc_formatter/tests/ir_transform/sort_imports.rs index 54effe8e0474c..06b66079a47f5 100644 --- a/crates/oxc_formatter/tests/ir_transform/sort_imports.rs +++ b/crates/oxc_formatter/tests/ir_transform/sort_imports.rs @@ -66,6 +66,22 @@ import("a"); import b from "b"; import c from "c"; import("a"); +"#, + ); + assert_format( + r#" +import internal from "~/internal"; +import internal2 from "@/internal2"; +import external from "external"; +import external2 from "@external2"; +"#, + r#"{ "experimentalSortImports": {} }"#, + r#" +import external2 from "@external2"; +import external from "external"; + +import internal2 from "@/internal2"; +import internal from "~/internal"; "#, ); }