diff --git a/crates/oxc_linter/src/rules/import/no_namespace.rs b/crates/oxc_linter/src/rules/import/no_namespace.rs index 9037c21c62cbe..cad00ec96c714 100644 --- a/crates/oxc_linter/src/rules/import/no_namespace.rs +++ b/crates/oxc_linter/src/rules/import/no_namespace.rs @@ -107,19 +107,11 @@ impl Rule for NoNamespace { ImportImportName::NamespaceObject => { let source = entry.module_request.name(); - if self.ignore.is_empty() { - ctx.diagnostic(no_namespace_diagnostic(entry.local_name.span)); - } else { - if !source.contains('.') { - return; - } - - if self.ignore.iter().any(|pattern| { - glob_match(pattern.as_str(), source.trim_start_matches("./")) - }) { - return; - } - + if self.ignore.is_empty() + || self.ignore.iter().all(|pattern| { + !glob_match(pattern.as_str(), source.trim_start_matches("./")) + }) + { ctx.diagnostic(no_namespace_diagnostic(entry.local_name.span)); } } @@ -152,6 +144,13 @@ fn test() { (r"import * as foo from 'foo';", None), (r"import defaultExport, * as foo from 'foo';", None), (r"import * as foo from './foo';", None), + ( + r" + import * as zod from 'zod' + import * as DrizzleKit from 'drizzle-kit/api' + ", + Some(serde_json::json!([{ "ignore": ["zod"] }])), + ), ]; Tester::new(NoNamespace::NAME, NoNamespace::PLUGIN, pass, fail) diff --git a/crates/oxc_linter/src/snapshots/import_no_namespace.snap b/crates/oxc_linter/src/snapshots/import_no_namespace.snap index 03d166ff05263..e4e7b7e351fe8 100644 --- a/crates/oxc_linter/src/snapshots/import_no_namespace.snap +++ b/crates/oxc_linter/src/snapshots/import_no_namespace.snap @@ -21,3 +21,12 @@ source: crates/oxc_linter/src/tester.rs · ─── ╰──── help: Use named or default imports + + ⚠ eslint-plugin-import(no-namespace): Usage of namespaced aka wildcard "*" imports prohibited + ╭─[index.js:3:25] + 2 │ import * as zod from 'zod' + 3 │ import * as DrizzleKit from 'drizzle-kit/api' + · ────────── + 4 │ + ╰──── + help: Use named or default imports