diff --git a/crates/oxc_linter/src/module_record.rs b/crates/oxc_linter/src/module_record.rs index f0ad951b97662..a99d78adb323c 100644 --- a/crates/oxc_linter/src/module_record.rs +++ b/crates/oxc_linter/src/module_record.rs @@ -24,8 +24,8 @@ type FxDashMap = DashMap; /// * #[derive(Default)] pub struct ModuleRecord { - /// This module has no import / export statements - pub not_esm: bool, + /// This module has ESM syntax: `import` and `export`. + pub has_module_syntax: bool, /// Resolved absolute path to this module record pub resolved_absolute_path: PathBuf, @@ -99,7 +99,7 @@ impl fmt::Debug for ModuleRecord { .unwrap_or_default(); let loaded_modules = format!("{{ {loaded_modules} }}"); f.debug_struct("ModuleRecord") - .field("not_esm", &self.not_esm) + .field("has_module_syntax", &self.has_module_syntax) .field("resolved_absolute_path", &self.resolved_absolute_path) .field("requested_modules", &self.requested_modules) .field("loaded_modules", &loaded_modules) @@ -434,7 +434,7 @@ impl ModuleRecord { _semantic: &Semantic, ) -> Self { Self { - not_esm: other.not_esm, + has_module_syntax: other.has_module_syntax, resolved_absolute_path: path.to_path_buf(), requested_modules: other .requested_modules diff --git a/crates/oxc_linter/src/rules/import/default.rs b/crates/oxc_linter/src/rules/import/default.rs index 61e81b06698d9..4aced42629320 100644 --- a/crates/oxc_linter/src/rules/import/default.rs +++ b/crates/oxc_linter/src/rules/import/default.rs @@ -62,7 +62,7 @@ impl Rule for Default { let Some(remote_module_record_ref) = module_record.loaded_modules.get(specifier) else { continue; }; - if remote_module_record_ref.not_esm { + if !remote_module_record_ref.has_module_syntax { continue; } if !remote_module_record_ref diff --git a/crates/oxc_linter/src/rules/import/named.rs b/crates/oxc_linter/src/rules/import/named.rs index 4c91dc22f085d..829d039e68694 100644 --- a/crates/oxc_linter/src/rules/import/named.rs +++ b/crates/oxc_linter/src/rules/import/named.rs @@ -102,7 +102,7 @@ impl Rule for Named { continue; }; let remote_module_record = remote_module_record_ref.value(); - if remote_module_record.not_esm { + if !remote_module_record.has_module_syntax { continue; } let import_span = import_name.span(); @@ -140,7 +140,7 @@ impl Rule for Named { continue; }; let remote_module_record = remote_module_record_ref.value(); - if remote_module_record.not_esm { + if !remote_module_record.has_module_syntax { continue; } // Check remote bindings diff --git a/crates/oxc_linter/src/rules/import/namespace.rs b/crates/oxc_linter/src/rules/import/namespace.rs index dd137d864b183..e4ac697919168 100644 --- a/crates/oxc_linter/src/rules/import/namespace.rs +++ b/crates/oxc_linter/src/rules/import/namespace.rs @@ -118,7 +118,12 @@ impl Rule for Namespace { fn run_once(&self, ctx: &LintContext<'_>) { let module_record = ctx.module_record(); - module_record.import_entries.iter().for_each(|entry| { + + if !module_record.has_module_syntax { + return; + } + + for entry in &module_record.import_entries { let (source, module) = match &entry.import_name { ImportImportName::NamespaceObject => { let source = entry.module_request.name(); @@ -151,10 +156,6 @@ impl Rule for Namespace { } }; - if module.not_esm { - return; - } - let Some(symbol_id) = ctx.scopes().get_root_binding(entry.local_name.name()) else { return; }; @@ -213,7 +214,7 @@ impl Rule for Namespace { } } }); - }); + } } } diff --git a/crates/oxc_linter/src/rules/import/no_namespace.rs b/crates/oxc_linter/src/rules/import/no_namespace.rs index 25321cc5f0fc4..165a57d9ac8b6 100644 --- a/crates/oxc_linter/src/rules/import/no_namespace.rs +++ b/crates/oxc_linter/src/rules/import/no_namespace.rs @@ -99,7 +99,7 @@ impl Rule for NoNamespace { fn run_once(&self, ctx: &LintContext<'_>) { let module_record = ctx.module_record(); - if module_record.not_esm { + if !module_record.has_module_syntax { return; } diff --git a/crates/oxc_linter/src/rules/import/unambiguous.rs b/crates/oxc_linter/src/rules/import/unambiguous.rs index b775eacf25384..3c1e08ae91abd 100644 --- a/crates/oxc_linter/src/rules/import/unambiguous.rs +++ b/crates/oxc_linter/src/rules/import/unambiguous.rs @@ -48,7 +48,7 @@ declare_oxc_lint!( /// impl Rule for Unambiguous { fn run_once(&self, ctx: &LintContext<'_>) { - if ctx.module_record().not_esm { + if !ctx.module_record().has_module_syntax { ctx.diagnostic(unambiguous_diagnostic(Span::default())); } } diff --git a/crates/oxc_linter/src/rules/oxc/no_barrel_file.rs b/crates/oxc_linter/src/rules/oxc/no_barrel_file.rs index de643ba0fadfc..f6cea20a837a5 100644 --- a/crates/oxc_linter/src/rules/oxc/no_barrel_file.rs +++ b/crates/oxc_linter/src/rules/oxc/no_barrel_file.rs @@ -72,7 +72,7 @@ impl Rule for NoBarrelFile { fn run_once(&self, ctx: &LintContext<'_>) { let module_record = ctx.module_record(); - if module_record.not_esm { + if !module_record.has_module_syntax { return; } diff --git a/crates/oxc_parser/src/module_record.rs b/crates/oxc_parser/src/module_record.rs index f1754da087d45..2921e9e8cb60e 100644 --- a/crates/oxc_parser/src/module_record.rs +++ b/crates/oxc_parser/src/module_record.rs @@ -173,7 +173,7 @@ impl<'a> ModuleRecordBuilder<'a> { } pub fn visit_module_declaration(&mut self, module_decl: &ModuleDeclaration<'a>) { - self.module_record.not_esm = false; + self.module_record.has_module_syntax = true; match module_decl { ModuleDeclaration::ImportDeclaration(import_decl) => { self.visit_import_declaration(import_decl); diff --git a/crates/oxc_syntax/src/module_record.rs b/crates/oxc_syntax/src/module_record.rs index a43cfceac0e72..5930705c70d05 100644 --- a/crates/oxc_syntax/src/module_record.rs +++ b/crates/oxc_syntax/src/module_record.rs @@ -14,8 +14,8 @@ use rustc_hash::FxHashMap; /// * #[derive(Debug)] pub struct ModuleRecord<'a> { - /// This module has no import / export statements - pub not_esm: bool, + /// This module has ESM syntax: `import` and `export`. + pub has_module_syntax: bool, /// `[[RequestedModules]]` /// @@ -61,7 +61,7 @@ impl<'a> ModuleRecord<'a> { /// Constructor pub fn new(allocator: &'a Allocator) -> Self { Self { - not_esm: true, + has_module_syntax: false, requested_modules: FxHashMap::default(), import_entries: Vec::new_in(allocator), local_export_entries: Vec::new_in(allocator),