summaryrefslogtreecommitdiff
path: root/core/modules.rs
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules.rs')
-rw-r--r--core/modules.rs37
1 files changed, 37 insertions, 0 deletions
diff --git a/core/modules.rs b/core/modules.rs
index b6220bb3b..3d335f8eb 100644
--- a/core/modules.rs
+++ b/core/modules.rs
@@ -328,6 +328,7 @@ pub type InternalModuleLoaderCb =
pub struct InternalModuleLoader {
module_loader: Rc<dyn ModuleLoader>,
esm_sources: Vec<ExtensionFileSource>,
+ used_esm_sources: RefCell<HashMap<String, bool>>,
maybe_load_callback: Option<InternalModuleLoaderCb>,
}
@@ -336,6 +337,7 @@ impl Default for InternalModuleLoader {
Self {
module_loader: Rc::new(NoopModuleLoader),
esm_sources: vec![],
+ used_esm_sources: RefCell::new(HashMap::default()),
maybe_load_callback: None,
}
}
@@ -347,14 +349,43 @@ impl InternalModuleLoader {
esm_sources: Vec<ExtensionFileSource>,
maybe_load_callback: Option<InternalModuleLoaderCb>,
) -> Self {
+ let used_esm_sources: HashMap<String, bool> = esm_sources
+ .iter()
+ .map(|file_source| (file_source.specifier.to_string(), false))
+ .collect();
+
InternalModuleLoader {
module_loader: module_loader.unwrap_or_else(|| Rc::new(NoopModuleLoader)),
esm_sources,
+ used_esm_sources: RefCell::new(used_esm_sources),
maybe_load_callback,
}
}
}
+impl Drop for InternalModuleLoader {
+ fn drop(&mut self) {
+ let used_esm_sources = self.used_esm_sources.get_mut();
+ let unused_modules: Vec<_> = used_esm_sources
+ .iter()
+ .filter(|(_s, v)| !*v)
+ .map(|(s, _)| s)
+ .collect();
+
+ if !unused_modules.is_empty() {
+ let mut msg =
+ "Following modules were passed to InternalModuleLoader but never used:\n"
+ .to_string();
+ for m in unused_modules {
+ msg.push_str(" - ");
+ msg.push_str(m);
+ msg.push('\n');
+ }
+ panic!("{}", msg);
+ }
+ }
+}
+
impl ModuleLoader for InternalModuleLoader {
fn resolve(
&self,
@@ -400,6 +431,12 @@ impl ModuleLoader for InternalModuleLoader {
.find(|file_source| file_source.specifier == module_specifier.as_str());
if let Some(file_source) = maybe_file_source {
+ {
+ let mut used_esm_sources = self.used_esm_sources.borrow_mut();
+ let used = used_esm_sources.get_mut(&file_source.specifier).unwrap();
+ *used = true;
+ }
+
let result = if let Some(load_callback) = &self.maybe_load_callback {
load_callback(file_source)
} else {