diff --git a/Cargo.lock b/Cargo.lock index fe9d07c33..3f9459fea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2537,7 +2537,6 @@ dependencies = [ "glob-match", "insta", "mako_core", - "maplit", "miette 5.10.0", "serde", "serde_json", @@ -2580,6 +2579,7 @@ dependencies = [ "puffin_egui", "rayon", "regex", + "rustc-hash", "sailfish", "serde", "serde-xml-rs", @@ -2609,12 +2609,6 @@ dependencies = [ "libc", ] -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - [[package]] name = "markdown" version = "1.0.0-alpha.11" diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 55eb026cc..ceeaf4453 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -91,6 +91,7 @@ convert_case = "0.6.0" path-clean = "1.0.1" sailfish = "0.8.3" merge-source-map = "1.2.0" +rustc-hash = "1.1.0" [features] profile = ["dep:eframe", "dep:puffin", "dep:puffin_egui"] diff --git a/crates/core/src/collections.rs b/crates/core/src/collections.rs new file mode 100644 index 000000000..f1a44b3ba --- /dev/null +++ b/crates/core/src/collections.rs @@ -0,0 +1,32 @@ +pub use rustchash::{FxHashMap as HashMap, FxHashSet as HashSet}; + +mod rustchash { + use std::collections::{HashMap, HashSet}; + use std::hash::BuildHasherDefault; + + use rustc_hash::FxHasher; + + pub type FxRandomState = BuildHasherDefault; + + pub type FxHashMap = HashMap; + + pub type FxHashSet = HashSet; +} + +#[macro_export(local_inner_macros)] +macro_rules! hashmap { + (@single $($x:tt)*) => (()); + (@count $($rest:expr),*) => (<[()]>::len(&[$(hashmap!(@single $rest)),*])); + + ($($key:expr => $value:expr,)+) => { hashmap!($($key => $value),+) }; + ($($key:expr => $value:expr),*) => { + { + let _cap = hashmap!(@count $($key),*); + let mut _map = $crate::collections::HashMap::default(); + $( + let _ = _map.insert($key, $value); + )* + _map + } + }; +} diff --git a/crates/core/src/lib.rs b/crates/core/src/lib.rs index 7a7aa02db..ab3812313 100644 --- a/crates/core/src/lib.rs +++ b/crates/core/src/lib.rs @@ -29,6 +29,8 @@ pub use { tracing_subscriber, tungstenite, twox_hash, }; +pub mod collections; + #[macro_export] macro_rules! mako_profile_scope { ($id:expr) => { diff --git a/crates/mako/Cargo.toml b/crates/mako/Cargo.toml index 83a63996a..e94033c22 100644 --- a/crates/mako/Cargo.toml +++ b/crates/mako/Cargo.toml @@ -21,7 +21,6 @@ glob-match = "0.2.1" [dev-dependencies] insta = { version = "1.30.0", features = ["yaml"] } -maplit = "1.0.2" testing = "0.35.10" swc_ecma_transforms_testing = "0.136.2" diff --git a/crates/mako/src/build.rs b/crates/mako/src/build.rs index 1299ce74f..5d2a405f9 100644 --- a/crates/mako/src/build.rs +++ b/crates/mako/src/build.rs @@ -1,4 +1,3 @@ -use std::collections::{HashMap, HashSet}; use std::path::PathBuf; use std::sync::mpsc::Sender; use std::sync::Arc; @@ -6,6 +5,7 @@ use std::time::Instant; use cached::proc_macro::cached; use mako_core::anyhow::{anyhow, Result}; +use mako_core::collections::{HashMap, HashSet}; use mako_core::colored::Colorize; use mako_core::lazy_static::lazy_static; use mako_core::rayon::ThreadPool; @@ -82,7 +82,7 @@ impl Compiler { pub fn build_tasks(&self, tasks: Vec, with_cache: bool) -> Result> { debug!("build tasks: {:?}", tasks); if tasks.is_empty() { - return Ok(HashSet::new()); + return Ok(HashSet::default()); } let (pool, rs, rr) = create_thread_pool::>(); @@ -99,7 +99,7 @@ impl Compiler { } let mut errors = vec![]; - let mut module_ids = HashSet::new(); + let mut module_ids = HashSet::default(); for r in rr { count -= 1; match r { @@ -279,7 +279,7 @@ module.exports = new Promise((resolve, reject) => {{ raw: code, raw_hash: 0, resolved_resource: Some(resource.clone()), - missing_deps: HashMap::new(), + missing_deps: HashMap::default(), ignored_deps: vec![], top_level_await: false, is_async: has_script, @@ -342,7 +342,7 @@ module.exports = new Promise((resolve, reject) => {{ // resolve let mut dep_resolve_err = None; let mut dependencies_resource = Vec::new(); - let mut missing_deps = HashMap::new(); + let mut missing_deps = HashMap::default(); let mut ignored_deps = Vec::new(); for dep in deps { @@ -370,7 +370,7 @@ module.exports = new Promise((resolve, reject) => {{ let source = e.1; let span = e.3; // 使用 hasMap 记录循环依赖 - let mut target_map: HashMap = HashMap::new(); + let mut target_map: HashMap = HashMap::default(); target_map.insert(target, 1); let mut err = format!("Module not found: Can't resolve '{}'", source); diff --git a/crates/mako/src/chunk_graph.rs b/crates/mako/src/chunk_graph.rs index 9f30ef662..35d0af5d7 100644 --- a/crates/mako/src/chunk_graph.rs +++ b/crates/mako/src/chunk_graph.rs @@ -1,6 +1,6 @@ -use std::collections::{HashMap, HashSet}; use std::hash::Hasher; +use mako_core::collections::{HashMap, HashSet}; use mako_core::petgraph::stable_graph::{DefaultIx, NodeIndex, StableDiGraph}; use mako_core::petgraph::visit::Dfs; use mako_core::petgraph::Direction; @@ -19,7 +19,7 @@ impl ChunkGraph { pub fn new() -> Self { Self { graph: StableDiGraph::new(), - id_index_map: HashMap::new(), + id_index_map: HashMap::default(), } } diff --git a/crates/mako/src/chunk_pot.rs b/crates/mako/src/chunk_pot.rs index 8c66ec087..2fc38a623 100644 --- a/crates/mako/src/chunk_pot.rs +++ b/crates/mako/src/chunk_pot.rs @@ -2,11 +2,11 @@ mod ast_impl; mod str_impl; pub mod util; -use std::collections::HashMap; use std::sync::Arc; use std::vec; use mako_core::anyhow::Result; +use mako_core::collections::HashMap; use mako_core::indexmap::IndexSet; use mako_core::swc_css_ast::Stylesheet; use mako_core::ternary; diff --git a/crates/mako/src/chunk_pot/ast_impl.rs b/crates/mako/src/chunk_pot/ast_impl.rs index 5d7d1f58d..1cf65ccc4 100644 --- a/crates/mako/src/chunk_pot/ast_impl.rs +++ b/crates/mako/src/chunk_pot/ast_impl.rs @@ -1,9 +1,9 @@ -use std::collections::HashMap; use std::sync::Arc; use cached::proc_macro::cached; use mako_core::anyhow::Result; use mako_core::cached::SizedCache; +use mako_core::collections::HashMap; use mako_core::swc_common::{Mark, DUMMY_SP, GLOBALS}; use mako_core::swc_css_ast::Stylesheet; use mako_core::swc_css_codegen::writer::basic::{BasicCssWriter, BasicCssWriterConfig}; diff --git a/crates/mako/src/chunk_pot/str_impl.rs b/crates/mako/src/chunk_pot/str_impl.rs index c8253dbdb..ed91059df 100644 --- a/crates/mako/src/chunk_pot/str_impl.rs +++ b/crates/mako/src/chunk_pot/str_impl.rs @@ -1,9 +1,9 @@ -use std::collections::HashMap; use std::sync::Arc; use cached::proc_macro::cached; use mako_core::anyhow::{anyhow, Result}; use mako_core::cached::SizedCache; +use mako_core::collections::HashMap; use mako_core::rayon::prelude::*; use mako_core::swc_ecma_codegen::text_writer::JsWriter; use mako_core::swc_ecma_codegen::{Config as JsCodegenConfig, Emitter}; @@ -223,11 +223,7 @@ fn pot_to_chunk_module_object_string(pot: &ChunkPot, context: &Arc) -> let sorted_kv = { mako_core::mako_profile_scope!("collect_&_sort"); - let mut sorted_kv = pot - .module_map - .iter() - .map(|(k, v)| (k, v)) - .collect::>(); + let mut sorted_kv = pot.module_map.iter().collect::>(); if context.config.hash { sorted_kv.sort_by_key(|(k, _)| *k); diff --git a/crates/mako/src/chunk_pot/util.rs b/crates/mako/src/chunk_pot/util.rs index bda69661b..7b7d76b9d 100644 --- a/crates/mako/src/chunk_pot/util.rs +++ b/crates/mako/src/chunk_pot/util.rs @@ -1,10 +1,10 @@ -use std::collections::HashMap; use std::hash::{Hash, Hasher}; use std::sync::Arc; use cached::proc_macro::cached; use mako_core::anyhow::{anyhow, Result}; use mako_core::cached::SizedCache; +use mako_core::collections::HashMap; use mako_core::sailfish::TemplateOnce; use mako_core::swc_common::DUMMY_SP; use mako_core::swc_ecma_ast::{ @@ -127,7 +127,7 @@ where K: Hash + Eq + Ord, V: Hash, { - let mut sorted_kv = map.iter().map(|(k, v)| (k, v)).collect::>(); + let mut sorted_kv = map.iter().collect::>(); sorted_kv.sort_by_key(|(k, _)| *k); let mut hasher: XxHash64 = Default::default(); @@ -160,11 +160,7 @@ pub(super) fn to_array_lit(elems: Vec) -> ArrayLit { pub(crate) fn pot_to_module_object(pot: &ChunkPot, context: &Arc) -> Result { mako_core::mako_profile_function!(); - let mut sorted_kv = pot - .module_map - .iter() - .map(|(k, v)| (k, v)) - .collect::>(); + let mut sorted_kv = pot.module_map.iter().collect::>(); sorted_kv.sort_by_key(|(k, _)| *k); let mut props = Vec::new(); diff --git a/crates/mako/src/compiler.rs b/crates/mako/src/compiler.rs index e17f2802a..69b2e93dd 100644 --- a/crates/mako/src/compiler.rs +++ b/crates/mako/src/compiler.rs @@ -1,10 +1,10 @@ -use std::collections::HashMap; use std::fs; use std::path::PathBuf; use std::sync::{Arc, Mutex, RwLock}; use std::time::{Instant, UNIX_EPOCH}; use mako_core::anyhow::{anyhow, Error, Result}; +use mako_core::collections::HashMap; use mako_core::colored::Colorize; use mako_core::regex::Regex; use mako_core::swc_common::sync::Lrc; @@ -50,7 +50,7 @@ pub struct MemoryChunkFileCache { impl MemoryChunkFileCache { pub fn new(root: Option) -> Self { Self { - content_map: HashMap::new(), + content_map: HashMap::default(), root, } } @@ -119,7 +119,7 @@ impl Default for Context { root: PathBuf::from(""), module_graph: RwLock::new(ModuleGraph::new()), chunk_graph: RwLock::new(ChunkGraph::new()), - assets_info: Mutex::new(HashMap::new()), + assets_info: Mutex::new(HashMap::default()), modules_with_missing_deps: RwLock::new(Vec::new()), meta: Meta::new(), plugin_driver: Default::default(), @@ -271,7 +271,7 @@ impl Compiler { if let Some(minifish_config) = &config._minifish { let inject = if let Some(inject) = &minifish_config.inject { - let mut map = HashMap::new(); + let mut map = HashMap::default(); for (k, ii) in inject.iter() { let exclude = if let Some(exclude) = &ii.exclude { @@ -342,7 +342,7 @@ impl Compiler { root, module_graph: RwLock::new(ModuleGraph::new()), chunk_graph: RwLock::new(ChunkGraph::new()), - assets_info: Mutex::new(HashMap::new()), + assets_info: Mutex::new(HashMap::default()), modules_with_missing_deps: RwLock::new(Vec::new()), meta: Meta::new(), plugin_driver, diff --git a/crates/mako/src/config.rs b/crates/mako/src/config.rs index d03da2ec3..d2187a3df 100644 --- a/crates/mako/src/config.rs +++ b/crates/mako/src/config.rs @@ -1,10 +1,10 @@ -use std::collections::HashMap; use std::fmt; use std::hash::Hasher; use std::path::{Path, PathBuf}; use mako_core::anyhow::{anyhow, Result}; use mako_core::clap::ValueEnum; +use mako_core::collections::HashMap; use mako_core::colored::Colorize; use mako_core::regex::Regex; use mako_core::serde::{Deserialize, Deserializer}; @@ -729,7 +729,7 @@ impl Config { let target = config.targets.get("node").unwrap_or(&14.0); // set target to node version - config.targets = HashMap::from([("node".into(), *target)]); + config.targets = HashMap::from_iter([("node".into(), *target)]); // ignore standard library config diff --git a/crates/mako/src/generate.rs b/crates/mako/src/generate.rs index 9d6b74186..037db89a7 100644 --- a/crates/mako/src/generate.rs +++ b/crates/mako/src/generate.rs @@ -1,4 +1,3 @@ -use std::collections::HashSet; use std::fs; use std::ops::DerefMut; use std::path::PathBuf; @@ -6,6 +5,7 @@ use std::sync::Arc; use std::time::{Duration, Instant}; use mako_core::anyhow::{anyhow, Result}; +use mako_core::collections::HashSet; use mako_core::indexmap::IndexSet; use mako_core::rayon::prelude::*; use mako_core::serde::Serialize; diff --git a/crates/mako/src/generate_chunks.rs b/crates/mako/src/generate_chunks.rs index 91cb54384..b6b3d69ff 100644 --- a/crates/mako/src/generate_chunks.rs +++ b/crates/mako/src/generate_chunks.rs @@ -1,10 +1,10 @@ -use std::collections::HashMap; use std::path::Path; use std::sync::Arc; use std::time::Instant; use std::vec; use mako_core::anyhow::{anyhow, Result}; +use mako_core::collections::HashMap; use mako_core::indexmap::IndexSet; use mako_core::swc_common::DUMMY_SP; use mako_core::swc_css_ast::Stylesheet; @@ -187,8 +187,8 @@ impl Compiler { fn chunk_maps( non_entry_chunk_files: &[ChunkFile], ) -> (HashMap, HashMap) { - let mut js_chunk_map: HashMap = HashMap::new(); - let mut css_chunk_map: HashMap = HashMap::new(); + let mut js_chunk_map: HashMap = HashMap::default(); + let mut css_chunk_map: HashMap = HashMap::default(); for f in non_entry_chunk_files.iter() { match f.file_type { diff --git a/crates/mako/src/group_chunk.rs b/crates/mako/src/group_chunk.rs index 475a1031e..73cc7e6c2 100644 --- a/crates/mako/src/group_chunk.rs +++ b/crates/mako/src/group_chunk.rs @@ -20,7 +20,7 @@ impl Compiler { mako_core::mako_profile_function!(); debug!("group_chunk"); - let mut visited = HashSet::new(); + let mut visited = HashSet::default(); let mut edges = vec![]; let module_graph = self.context.module_graph.read().unwrap(); let mut chunk_graph = self.context.chunk_graph.write().unwrap(); diff --git a/crates/mako/src/lib.rs b/crates/mako/src/lib.rs index c2d2f0e27..a3fcb1c48 100644 --- a/crates/mako/src/lib.rs +++ b/crates/mako/src/lib.rs @@ -1,7 +1,6 @@ #![feature(box_patterns)] #![feature(hasher_prefixfree_extras)] #![feature(let_chains)] -#![feature(result_option_inspect)] mod analyze_deps; mod ast; diff --git a/crates/mako/src/main.rs b/crates/mako/src/main.rs index 65fec9798..8d8d62a2d 100644 --- a/crates/mako/src/main.rs +++ b/crates/mako/src/main.rs @@ -1,6 +1,5 @@ #![feature(box_patterns)] #![feature(let_chains)] -#![feature(result_option_inspect)] use std::sync::Arc; diff --git a/crates/mako/src/module.rs b/crates/mako/src/module.rs index 043ad9acd..a062c8474 100644 --- a/crates/mako/src/module.rs +++ b/crates/mako/src/module.rs @@ -1,10 +1,10 @@ -use std::collections::{HashMap, HashSet}; use std::fmt::{Debug, Formatter}; use std::path::PathBuf; use std::sync::Arc; use mako_core::anyhow::{anyhow, Result}; use mako_core::base64::engine::{general_purpose, Engine}; +use mako_core::collections::{HashMap, HashSet}; use mako_core::pathdiff::diff_paths; use mako_core::swc_common::{Span, DUMMY_SP}; use mako_core::swc_ecma_ast::{BlockStmt, FnExpr, Function, Module as SwcModule}; diff --git a/crates/mako/src/module_graph.rs b/crates/mako/src/module_graph.rs index c374e1fdc..83d52faf0 100644 --- a/crates/mako/src/module_graph.rs +++ b/crates/mako/src/module_graph.rs @@ -1,6 +1,6 @@ -use std::collections::{HashMap, HashSet}; use std::fmt; +use mako_core::collections::{HashMap, HashSet}; use mako_core::petgraph::graph::{DefaultIx, NodeIndex}; use mako_core::petgraph::prelude::EdgeRef; use mako_core::petgraph::stable_graph::{StableDiGraph, WalkNeighbors}; @@ -20,9 +20,9 @@ pub struct ModuleGraph { impl ModuleGraph { pub fn new() -> Self { Self { - id_index_map: HashMap::new(), + id_index_map: HashMap::default(), graph: StableDiGraph::new(), - entries: HashSet::new(), + entries: HashSet::default(), } } @@ -150,7 +150,7 @@ impl ModuleGraph { let edges = self.graph.edge_weight_mut(dep).unwrap(); edges.insert(edge); } else { - let mut edges = Dependencies::new(); + let mut edges = Dependencies::default(); edges.insert(edge); self.graph.update_edge(*from, *to, edges); } @@ -319,7 +319,7 @@ impl ModuleGraph { let mut entries = self.entries.iter().collect::>(); entries.sort(); - let mut visited = HashSet::new(); + let mut visited = HashSet::default(); for entry in entries { let mut res = vec![]; diff --git a/crates/mako/src/optimize_chunk.rs b/crates/mako/src/optimize_chunk.rs index 330785a6d..df54db959 100644 --- a/crates/mako/src/optimize_chunk.rs +++ b/crates/mako/src/optimize_chunk.rs @@ -1,6 +1,6 @@ -use std::collections::HashMap; use std::string::String; +use mako_core::collections::HashMap; use mako_core::indexmap::{IndexMap, IndexSet}; use mako_core::nodejs_resolver::Resource; use mako_core::regex::Regex; @@ -323,7 +323,10 @@ impl Compiler { } else { size_map.insert( pkg_name.to_string(), - (module_size, HashMap::from([(mtc.0.clone(), mtc.1.clone())])), + ( + module_size, + HashMap::from_iter([(mtc.0.clone(), mtc.1.clone())]), + ), ); } size_map @@ -379,7 +382,7 @@ impl Compiler { } fn apply_optimize_infos(&self, optimize_chunks_infos: &Vec) { - let mut edges_map: HashMap> = HashMap::new(); + let mut edges_map: HashMap> = HashMap::default(); let mut chunk_graph = self.context.chunk_graph.write().unwrap(); for info in optimize_chunks_infos { @@ -433,7 +436,7 @@ impl Compiler { } fn apply_hot_update_optimize_infos(&self, optimize_chunks_infos: &Vec) { - let mut edges = HashMap::new(); + let mut edges = HashMap::default(); let mut chunk_graph = self.context.chunk_graph.write().unwrap(); for info in optimize_chunks_infos { // update group chunk diff --git a/crates/mako/src/plugins/bundless_compiler.rs b/crates/mako/src/plugins/bundless_compiler.rs index 7c7e3bd85..b0de8d4a9 100644 --- a/crates/mako/src/plugins/bundless_compiler.rs +++ b/crates/mako/src/plugins/bundless_compiler.rs @@ -1,10 +1,10 @@ -use std::collections::HashMap; use std::fs; use std::fs::create_dir_all; use std::path::{Path, PathBuf}; use std::sync::Arc; use mako_core::anyhow::{anyhow, Result}; +use mako_core::collections::HashMap; use mako_core::pathdiff::diff_paths; use mako_core::rayon::prelude::*; use mako_core::swc_common::errors::HANDLER; diff --git a/crates/mako/src/plugins/context_module.rs b/crates/mako/src/plugins/context_module.rs index 2f0c2ec94..4ab9dbc96 100644 --- a/crates/mako/src/plugins/context_module.rs +++ b/crates/mako/src/plugins/context_module.rs @@ -190,8 +190,7 @@ fn try_replace_context_arg( // handle `(...)` Expr::Paren(ParenExpr { expr: paren_expr, .. - }) => try_replace_context_arg(paren_expr, has_visit_top_bin) - .map(|(prefix, suffix)| (prefix, suffix)), + }) => try_replace_context_arg(paren_expr, has_visit_top_bin), // handle `'./foo/' + bar` Expr::Bin(BinExpr { diff --git a/crates/mako/src/plugins/farm_tree_shake/module.rs b/crates/mako/src/plugins/farm_tree_shake/module.rs index b1d56faab..219c3345d 100644 --- a/crates/mako/src/plugins/farm_tree_shake/module.rs +++ b/crates/mako/src/plugins/farm_tree_shake/module.rs @@ -1,5 +1,4 @@ -use std::collections::{HashMap, HashSet}; - +use mako_core::collections::{HashMap, HashSet}; use mako_core::swc_common::SyntaxContext; use mako_core::swc_ecma_ast::{Module as SwcModule, ModuleItem}; @@ -334,7 +333,7 @@ impl TreeShakeModule { pub fn used_statements(&self) -> HashMap> { // 1. get used exports let used_exports_idents = self.used_exports_idents(); - let mut stmt_used_idents_map = HashMap::new(); + let mut stmt_used_idents_map = HashMap::default(); for (used_ident, stmt_id) in used_exports_idents { let used_idents: &mut HashSet = @@ -357,7 +356,7 @@ impl TreeShakeModule { // // find the defined ident // stmt_used_idents_map // .entry(stmt.id) - // .or_insert(HashSet::new()); + // .or_insert(HashSet::default()); // for stmt_inner in self.stmt_graph.stmts() { // if stmt_inner.id == stmt.id { @@ -374,7 +373,7 @@ impl TreeShakeModule { // { // let used_idents = stmt_used_idents_map // .entry(stmt_inner.id) - // .or_insert(HashSet::new()); + // .or_insert(HashSet::default()); // used_idents.insert(UsedIdent::SwcIdent(used_ident.clone())); // } // } @@ -391,7 +390,7 @@ impl TreeShakeModule { // for imp in self.imports() { // if imp.source.contains("@swc/helpers") { // used.entry(imp.stmt_id) - // .or_insert(HashSet::new()); + // .or_insert(HashSet::default()); // } // } // diff --git a/crates/mako/src/plugins/farm_tree_shake/shake.rs b/crates/mako/src/plugins/farm_tree_shake/shake.rs index 90c02a242..b42475141 100644 --- a/crates/mako/src/plugins/farm_tree_shake/shake.rs +++ b/crates/mako/src/plugins/farm_tree_shake/shake.rs @@ -6,6 +6,7 @@ use std::ops::DerefMut; use std::sync::Arc; use mako_core::anyhow::Result; +use mako_core::collections::HashMap; use mako_core::swc_common::comments::{Comment, CommentKind}; use mako_core::swc_common::{DUMMY_SP, GLOBALS}; @@ -38,7 +39,7 @@ pub fn optimize_farm(module_graph: &mut ModuleGraph, context: &Arc) -> }; let mut tree_shake_modules_ids = vec![]; - let mut tree_shake_modules_map = std::collections::HashMap::new(); + let mut tree_shake_modules_map = HashMap::default(); let mut order: usize = 0; for module_id in topo_sorted_modules.iter() { @@ -364,7 +365,7 @@ pub fn optimize_farm(module_graph: &mut ModuleGraph, context: &Arc) -> // Add all imported to used_exports // returns (added, imported_module_topo_order) fn add_used_exports_by_import_info( - tree_shake_modules_map: &std::collections::HashMap>, + tree_shake_modules_map: &HashMap>, module_graph: &ModuleGraph, tree_shake_module_id: &ModuleId, import_info: &ImportInfo, @@ -439,7 +440,7 @@ fn add_used_exports_by_import_info( /// All all exported to used_exports fn add_used_exports_by_export_info( - tree_shake_modules_map: &std::collections::HashMap>, + tree_shake_modules_map: &HashMap>, module_graph: &ModuleGraph, tree_shake_module_id: &ModuleId, has_side_effects: bool, diff --git a/crates/mako/src/plugins/farm_tree_shake/shake/skip_module.rs b/crates/mako/src/plugins/farm_tree_shake/shake/skip_module.rs index eb466f76c..913615d0a 100644 --- a/crates/mako/src/plugins/farm_tree_shake/shake/skip_module.rs +++ b/crates/mako/src/plugins/farm_tree_shake/shake/skip_module.rs @@ -1,8 +1,8 @@ use std::cell::RefCell; -use std::collections::HashMap; use std::sync::Arc; use mako_core::anyhow::Result; +use mako_core::collections::HashMap; use mako_core::swc_common::util::take::Take; use swc_core::common::{Span, Spanned}; use swc_core::ecma::ast::{ @@ -145,7 +145,7 @@ pub enum ReExportType { pub(super) fn skip_module_optimize( module_graph: &mut ModuleGraph, - tree_shake_modules_ids: &Vec, + tree_shake_modules_ids: &[ModuleId], tree_shake_modules_map: &HashMap>, _context: &Arc, @@ -153,7 +153,7 @@ pub(super) fn skip_module_optimize( let mut re_export_replace_map: HashMap< ModuleId, Vec<(StatementId, Vec, String)>, - > = HashMap::new(); + > = HashMap::default(); let mut current_index: usize = 0; let len = tree_shake_modules_ids.len(); diff --git a/crates/mako/src/plugins/farm_tree_shake/statement_graph.rs b/crates/mako/src/plugins/farm_tree_shake/statement_graph.rs index e110736bb..06b4bfb6c 100644 --- a/crates/mako/src/plugins/farm_tree_shake/statement_graph.rs +++ b/crates/mako/src/plugins/farm_tree_shake/statement_graph.rs @@ -1,5 +1,6 @@ -use std::collections::{HashMap, HashSet, VecDeque}; +use std::collections::VecDeque; +use mako_core::collections::{HashMap, HashSet}; use mako_core::petgraph; use mako_core::petgraph::stable_graph::NodeIndex; use mako_core::swc_ecma_ast::{Module as SwcModule, ModuleItem}; @@ -244,10 +245,7 @@ impl Statement { } = analyze_imports_and_exports(&id, stmt, None, unresolved_ctxt); // transform defined_idents_map from HashMap> to HashMap using ToString - let defined_idents_map = defined_idents_map - .into_iter() - .map(|(key, value)| (key, value)) - .collect(); + let defined_idents_map = defined_idents_map.into_iter().collect(); Self { id, @@ -275,7 +273,7 @@ pub struct StatementGraph { impl StatementGraph { pub fn new(module: &SwcModule, unresolved_ctxt: SyntaxContext) -> Self { let mut g = petgraph::graph::Graph::new(); - let mut id_index_map = HashMap::new(); + let mut id_index_map = HashMap::default(); for (index, stmt) in module.body.iter().enumerate() { let statement = Statement::new(index, stmt, unresolved_ctxt); @@ -290,7 +288,7 @@ impl StatementGraph { for stmt in graph.stmts() { // find the statement that defines the ident for def_stmt in graph.stmts() { - let mut deps_idents = HashSet::new(); + let mut deps_idents = HashSet::default(); for di in &def_stmt.defined_idents { if stmt.used_idents.contains(di) { @@ -314,7 +312,7 @@ impl StatementGraph { pub fn empty() -> Self { Self { g: petgraph::graph::Graph::new(), - id_index_map: HashMap::new(), + id_index_map: HashMap::default(), } } @@ -377,15 +375,15 @@ impl StatementGraph { &self, used_exports: HashMap>, ) -> HashMap> { - let mut used_statements: HashMap> = HashMap::new(); + let mut used_statements: HashMap> = HashMap::default(); // sort used_exports by statement id let mut used_exports: Vec<_> = used_exports.into_iter().collect(); used_exports.sort_by(|a, b| a.0.cmp(&b.0)); for (stmt_id, used_export_idents) in used_exports { - let mut used_dep_idents = HashSet::new(); - let mut used_defined_idents = HashSet::new(); + let mut used_dep_idents = HashSet::default(); + let mut used_defined_idents = HashSet::default(); let mut skip = false; for ident in used_export_idents { @@ -407,12 +405,12 @@ impl StatementGraph { if let Some(specifiers) = used_statements.get_mut(&stmt_id) { specifiers.insert(specifier); } else { - used_statements.insert(stmt_id, [specifier].into()); + used_statements.insert(stmt_id, HashSet::from_iter([specifier])); } skip = true; } UsedIdent::ExportAll => { - used_statements.insert(stmt_id, ["*".to_string()].into()); + used_statements.insert(stmt_id, HashSet::from_iter(["*".to_string()])); skip = true; } } @@ -423,7 +421,7 @@ impl StatementGraph { } let mut stmts = VecDeque::from([(stmt_id, used_defined_idents, used_dep_idents)]); - let mut visited = HashSet::new(); + let mut visited = HashSet::default(); let hash_stmt = |stmt_id: &StatementId, used_defined_idents: &HashSet| { let mut sorted_idents = @@ -453,8 +451,8 @@ impl StatementGraph { for (dep_stmt, dep_idents) in deps { if dep_idents.iter().any(|di| used_dep_idents.contains(di)) { - let mut dep_stmt_idents = HashSet::new(); - let mut dep_used_defined_idents = HashSet::new(); + let mut dep_stmt_idents = HashSet::default(); + let mut dep_used_defined_idents = HashSet::default(); for ident in &used_dep_idents { if let Some(dep_idents) = diff --git a/crates/mako/src/plugins/farm_tree_shake/statement_graph/analyze_imports_and_exports.rs b/crates/mako/src/plugins/farm_tree_shake/statement_graph/analyze_imports_and_exports.rs index 88720a0b6..ac5d1385a 100644 --- a/crates/mako/src/plugins/farm_tree_shake/statement_graph/analyze_imports_and_exports.rs +++ b/crates/mako/src/plugins/farm_tree_shake/statement_graph/analyze_imports_and_exports.rs @@ -1,6 +1,6 @@ -use std::collections::{HashMap, HashSet}; use std::ops::Deref; +use mako_core::collections::{HashMap, HashSet}; use mako_core::swc_common::{Span, SyntaxContext, DUMMY_SP}; use mako_core::swc_ecma_ast; use mako_core::swc_ecma_ast::{Expr, ModuleExportName, ModuleItem, VarDecl}; @@ -29,9 +29,9 @@ pub fn analyze_imports_and_exports( used_defined_idents: Option>, unresolve_ctxt: SyntaxContext, ) -> StatementInfo { - let mut defined_idents = HashSet::new(); - let mut used_idents = HashSet::new(); - let mut defined_idents_map = HashMap::new(); + let mut defined_idents = HashSet::default(); + let mut used_idents = HashSet::default(); + let mut defined_idents_map = HashMap::default(); let mut imports = None; let mut exports = None; @@ -164,7 +164,7 @@ pub fn analyze_imports_and_exports( init.visit_with(&mut used_idents_collector); } - let mut local_used_idents = HashSet::new(); + let mut local_used_idents = HashSet::default(); local_used_idents.extend(used_idents_collector.used_idents); local_used_idents.extend(defined_idents_collector.used_idents); used_idents.extend(local_used_idents.clone()); @@ -257,8 +257,10 @@ pub fn analyze_imports_and_exports( if export_named.src.is_none() { used_idents.insert(local.to_string()); - defined_idents_map - .insert(local.to_string(), [local.to_string()].into()); + defined_idents_map.insert( + local.to_string(), + HashSet::from_iter([local.to_string()]), + ); } specifiers.push(ExportSpecifierInfo::Named { @@ -404,7 +406,7 @@ pub fn analyze_imports_and_exports( init.visit_with(&mut used_idents_collector); } - let mut local_used_idents = HashSet::new(); + let mut local_used_idents = HashSet::default(); local_used_idents.extend(used_idents_collector.used_idents); local_used_idents.extend(defined_idents_collector.used_idents); used_idents.extend(local_used_idents.clone()); diff --git a/crates/mako/src/plugins/farm_tree_shake/statement_graph/defined_idents_collector.rs b/crates/mako/src/plugins/farm_tree_shake/statement_graph/defined_idents_collector.rs index d2646292b..578ea783e 100644 --- a/crates/mako/src/plugins/farm_tree_shake/statement_graph/defined_idents_collector.rs +++ b/crates/mako/src/plugins/farm_tree_shake/statement_graph/defined_idents_collector.rs @@ -1,5 +1,4 @@ -use std::collections::HashSet; - +use mako_core::collections::HashSet; use mako_core::swc_ecma_ast::{ObjectPatProp, Pat}; use mako_core::swc_ecma_visit::{Visit, VisitWith}; @@ -13,8 +12,8 @@ pub struct DefinedIdentsCollector { impl DefinedIdentsCollector { pub fn new() -> Self { Self { - defined_idents: HashSet::new(), - used_idents: HashSet::new(), + defined_idents: HashSet::default(), + used_idents: HashSet::default(), } } } diff --git a/crates/mako/src/plugins/farm_tree_shake/statement_graph/used_idents_collector.rs b/crates/mako/src/plugins/farm_tree_shake/statement_graph/used_idents_collector.rs index 2dca94da2..120f8f21e 100644 --- a/crates/mako/src/plugins/farm_tree_shake/statement_graph/used_idents_collector.rs +++ b/crates/mako/src/plugins/farm_tree_shake/statement_graph/used_idents_collector.rs @@ -1,5 +1,4 @@ -use std::collections::HashSet; - +use mako_core::collections::HashSet; use mako_core::swc_ecma_ast::Ident; use mako_core::swc_ecma_visit::Visit; @@ -10,7 +9,7 @@ pub struct UsedIdentsCollector { impl UsedIdentsCollector { pub fn new() -> Self { Self { - used_idents: HashSet::new(), + used_idents: HashSet::default(), } } } diff --git a/crates/mako/src/plugins/minifish.rs b/crates/mako/src/plugins/minifish.rs index 8655917d5..43bc773d1 100644 --- a/crates/mako/src/plugins/minifish.rs +++ b/crates/mako/src/plugins/minifish.rs @@ -1,13 +1,13 @@ mod inject; mod unsimplify; -use std::collections::HashMap; use std::path::PathBuf; use std::sync::Arc; pub(crate) use inject::Inject; use inject::MyInjector; use mako_core::anyhow::{anyhow, Result}; +use mako_core::collections::HashMap; use mako_core::rayon::prelude::*; use mako_core::swc_ecma_visit::VisitMutWith; use serde::Serialize; @@ -88,7 +88,7 @@ impl Plugin for MinifishPlugin { return Ok(()); } - let mut matched_injects = HashMap::new(); + let mut matched_injects = HashMap::default(); for (k, i) in inject { if let Some(exclude) = &i.exclude { diff --git a/crates/mako/src/plugins/minifish/inject.rs b/crates/mako/src/plugins/minifish/inject.rs index 5df99cf63..6b93a3455 100644 --- a/crates/mako/src/plugins/minifish/inject.rs +++ b/crates/mako/src/plugins/minifish/inject.rs @@ -1,6 +1,6 @@ -use std::collections::HashMap; use std::hash::{Hash, Hasher}; +use mako_core::collections::HashMap; use mako_core::indexmap::IndexSet; use mako_core::regex::Regex; use mako_core::swc_common::{Mark, Span, SyntaxContext, DUMMY_SP}; @@ -211,9 +211,9 @@ impl Inject { mod tests { use std::sync::Arc; + use mako_core::hashmap; use mako_core::swc_common::GLOBALS; use mako_core::swc_ecma_transforms::resolver; - use maplit::hashmap; use super::*; use crate::analyze_deps::analyze_deps; diff --git a/crates/mako/src/resolve.rs b/crates/mako/src/resolve.rs index 8ae2ae85b..c023e6110 100644 --- a/crates/mako/src/resolve.rs +++ b/crates/mako/src/resolve.rs @@ -1,9 +1,9 @@ -use std::collections::{HashMap, HashSet}; use std::path::PathBuf; use std::sync::Arc; use std::vec; use mako_core::anyhow::{anyhow, Result}; +use mako_core::collections::HashMap; use mako_core::convert_case::{Case, Casing}; use mako_core::nodejs_resolver::{AliasMap, Options, ResolveResult, Resolver, Resource}; use mako_core::regex::{Captures, Regex}; @@ -294,7 +294,7 @@ pub fn get_resolvers(config: &Config) -> Resolvers { let css_resolver = get_resolver(config, ResolverType::Css); let ctxt_resolver = get_resolver(config, ResolverType::Ctxt); - let mut resolvers = HashMap::new(); + let mut resolvers = HashMap::default(); resolvers.insert(ResolverType::Cjs, cjs_resolver); resolvers.insert(ResolverType::Esm, esm_resolver); resolvers.insert(ResolverType::Css, css_resolver); @@ -324,7 +324,7 @@ fn get_resolver(config: &Config, resolver_type: ResolverType) -> Resolver { (ResolverType::Cjs, true) => Options { alias, extensions, - condition_names: HashSet::from([ + condition_names: std::collections::HashSet::from_iter([ "require".to_string(), "module".to_string(), "webpack".to_string(), @@ -341,7 +341,7 @@ fn get_resolver(config: &Config, resolver_type: ResolverType) -> Resolver { (ResolverType::Esm, true) => Options { alias, extensions, - condition_names: HashSet::from([ + condition_names: std::collections::HashSet::from_iter([ "import".to_string(), "module".to_string(), "webpack".to_string(), @@ -358,7 +358,7 @@ fn get_resolver(config: &Config, resolver_type: ResolverType) -> Resolver { (ResolverType::Esm, false) => Options { alias, extensions, - condition_names: HashSet::from([ + condition_names: std::collections::HashSet::from_iter([ "import".to_string(), "module".to_string(), "webpack".to_string(), @@ -369,7 +369,7 @@ fn get_resolver(config: &Config, resolver_type: ResolverType) -> Resolver { (ResolverType::Cjs, false) => Options { alias, extensions, - condition_names: HashSet::from([ + condition_names: std::collections::HashSet::from_iter([ "require".to_string(), "module".to_string(), "webpack".to_string(), @@ -382,7 +382,7 @@ fn get_resolver(config: &Config, resolver_type: ResolverType) -> Resolver { extensions: vec![".css".to_string(), ".less".to_string()], alias, main_fields: vec!["css".to_string(), "style".to_string(), "main".to_string()], - condition_names: HashSet::from(["style".to_string()]), + condition_names: std::collections::HashSet::from_iter(["style".to_string()]), prefer_relative: true, browser_field: true, ..Default::default() @@ -414,7 +414,7 @@ pub fn clear_resolver_cache(resolvers: &Resolvers) { #[cfg(test)] mod tests { - use std::collections::HashMap; + use mako_core::collections::HashMap; use crate::config::{ Config, ExternalAdvanced, ExternalAdvancedSubpath, ExternalAdvancedSubpathConverter, @@ -459,7 +459,7 @@ mod tests { #[test] fn test_resolve_alias() { - let alias = HashMap::from([("bar".to_string(), "foo".to_string())]); + let alias = HashMap::from_iter([("bar".to_string(), "foo".to_string())]); let x = resolve( "test/resolve/normal", Some(alias.clone()), @@ -480,7 +480,7 @@ mod tests { #[test] fn test_resolve_externals() { - let externals = HashMap::from([ + let externals = HashMap::from_iter([ ( "react".to_string(), ExternalConfig::Basic("react".to_string()), @@ -514,7 +514,7 @@ mod tests { #[test] fn test_resolve_advanced_externals() { - let externals = HashMap::from([ + let externals = HashMap::from_iter([ ( "antd".to_string(), ExternalConfig::Advanced(ExternalAdvanced { diff --git a/crates/mako/src/stats.rs b/crates/mako/src/stats.rs index 5200b2d7f..36bd25162 100644 --- a/crates/mako/src/stats.rs +++ b/crates/mako/src/stats.rs @@ -1,11 +1,11 @@ use std::cell::RefCell; use std::cmp::Ordering; -use std::collections::HashMap; use std::fs; use std::path::PathBuf; use std::rc::Rc; use std::time::{SystemTime, UNIX_EPOCH}; +use mako_core::collections::HashMap; use mako_core::colored::*; use mako_core::pathdiff::diff_paths; use mako_core::serde::Serialize; @@ -118,7 +118,7 @@ impl StatsJsonMap { assets: vec![], modules: vec![], chunks: vec![], - entrypoints: HashMap::new(), + entrypoints: HashMap::default(), } } } diff --git a/crates/mako/src/swc_helpers.rs b/crates/mako/src/swc_helpers.rs index 2a2745592..a79a4b85e 100644 --- a/crates/mako/src/swc_helpers.rs +++ b/crates/mako/src/swc_helpers.rs @@ -1,6 +1,6 @@ -use std::collections::{HashMap, HashSet}; use std::sync::Arc; +use mako_core::collections::{HashMap, HashSet}; use mako_core::swc_ecma_ast::{ CallExpr, Callee, Decl, Expr, Lit, Module, ModuleItem, Stmt, VarDecl, VarDeclarator, }; @@ -18,7 +18,7 @@ impl SwcHelpers { let helpers = if let Some(helpers) = helpers { helpers } else { - HashSet::new() + HashSet::default() }; Self { helpers } } @@ -33,7 +33,7 @@ impl SwcHelpers { // for watch mode pub fn full_helpers() -> HashSet { - let mut helpers = HashSet::new(); + let mut helpers = HashSet::default(); helpers.insert("@swc/helpers/_/_interop_require_default".into()); helpers.insert("@swc/helpers/_/_interop_require_wildcard".into()); helpers.insert("@swc/helpers/_/_export_star".into()); @@ -53,7 +53,7 @@ impl SwcHelpers { (key, h) }) .collect(); - let mut swc_helpers = HashSet::new(); + let mut swc_helpers = HashSet::default(); // Top level require only // why top level only? because swc helpers is only used in top level // why require only? because cjs transform is done before this diff --git a/crates/mako/src/targets.rs b/crates/mako/src/targets.rs index e0e00ed8e..f7d832fb7 100644 --- a/crates/mako/src/targets.rs +++ b/crates/mako/src/targets.rs @@ -1,5 +1,4 @@ -use std::collections::HashMap; - +use mako_core::collections::HashMap; use mako_core::swc_ecma_preset_env::Targets as SwcPresetEnvTargets; pub fn swc_preset_env_targets_from_map(map: HashMap) -> SwcPresetEnvTargets { diff --git a/crates/mako/src/test_helper.rs b/crates/mako/src/test_helper.rs index 30c61b109..857caa2e0 100644 --- a/crates/mako/src/test_helper.rs +++ b/crates/mako/src/test_helper.rs @@ -1,8 +1,8 @@ -use std::collections::HashMap; use std::fs; use std::path::PathBuf; use std::sync::Arc; +use mako_core::collections::HashMap; use mako_core::swc_common::sync::Lrc; use mako_core::swc_common::SourceMap; use mako_core::swc_ecma_ast::Module as SwcModule; @@ -61,7 +61,7 @@ pub fn create_mock_module(path: PathBuf, code: &str) -> Module { raw: code.to_string(), raw_hash: 0, resolved_resource: None, - missing_deps: HashMap::new(), + missing_deps: HashMap::default(), ignored_deps: vec![], top_level_await: false, is_async: false, diff --git a/crates/mako/src/transform.rs b/crates/mako/src/transform.rs index 819b20c8b..325f9b0e8 100644 --- a/crates/mako/src/transform.rs +++ b/crates/mako/src/transform.rs @@ -251,10 +251,10 @@ fn is_esm_modules(swc_module: &Module) -> bool { #[cfg(test)] mod tests { - use std::collections::HashMap; use std::path::PathBuf; use std::sync::{Arc, Mutex, RwLock}; + use mako_core::collections::HashMap; use mako_core::indexmap::IndexSet; use super::transform_js; @@ -277,7 +277,7 @@ const App = () => <>

Hello World

; App; "# .trim(); - let (code, _) = transform_js_code(code, None, HashMap::new()); + let (code, _) = transform_js_code(code, None, HashMap::default()); println!(">> CODE\n{}", code); assert_eq!( code, @@ -310,7 +310,7 @@ const Foo: string = "foo"; Foo; "# .trim(); - let (code, _) = transform_js_code(code, None, HashMap::new()); + let (code, _) = transform_js_code(code, None, HashMap::default()); println!(">> CODE\n{}", code); assert_eq!( code, @@ -334,7 +334,7 @@ const b: X = 1; b; "# .trim(); - let (code, _) = transform_js_code(code, None, HashMap::new()); + let (code, _) = transform_js_code(code, None, HashMap::default()); println!(">> CODE\n{}", code); assert_eq!( code, @@ -361,7 +361,7 @@ import { foo } from './foo'; foo; "# .trim(); - let (code, _) = transform_js_code(code, None, HashMap::new()); + let (code, _) = transform_js_code(code, None, HashMap::default()); println!(">> CODE\n{}", code); assert_eq!( code, @@ -385,7 +385,7 @@ import * as foo from './foo'; foo.bar; "# .trim(); - let (code, _) = transform_js_code(code, None, HashMap::new()); + let (code, _) = transform_js_code(code, None, HashMap::default()); println!(">> CODE\n{}", code); assert_eq!( code, @@ -410,7 +410,7 @@ const foo = import('./foo'); foo; "# .trim(); - let (code, _) = transform_js_code(code, None, HashMap::new()); + let (code, _) = transform_js_code(code, None, HashMap::default()); println!(">> CODE\n{}", code); assert_eq!( code, @@ -441,7 +441,7 @@ function foo() { foo(); "# .trim(); - let (code, _) = transform_js_code(code, None, HashMap::new()); + let (code, _) = transform_js_code(code, None, HashMap::default()); println!(">> CODE\n{}", code); let common = r#" console.log(process); @@ -480,7 +480,7 @@ import React from 'react'; React; "# .trim(); - let (code, _) = transform_js_code(code, None, HashMap::new()); + let (code, _) = transform_js_code(code, None, HashMap::default()); println!(">> CODE\n{}", code); assert_eq!( code, @@ -523,7 +523,7 @@ e; f; "# .trim(); - let (code, _sourcemap) = transform_js_code(code, None, HashMap::new()); + let (code, _sourcemap) = transform_js_code(code, None, HashMap::default()); println!(">> CODE\n{}", code); assert_eq!( code, @@ -570,7 +570,7 @@ const b = window.a?.b; b; "# .trim(); - let (code, _sourcemap) = transform_js_code(code, None, HashMap::new()); + let (code, _sourcemap) = transform_js_code(code, None, HashMap::default()); println!(">> CODE\n{}", code); assert_eq!( code, @@ -594,7 +594,7 @@ require("foo"); let (code, _sourcemap) = transform_js_code( code, None, - HashMap::from([( + HashMap::from_iter([( "foo".to_string(), ("./bar".to_string(), "./bar".to_string()), )]), @@ -628,7 +628,7 @@ if(true) { console.log("1"); } else { console.log("2"); } let (code, _sourcemap) = transform_js_code( code, None, - HashMap::from([( + HashMap::from_iter([( "foo".to_string(), ("./bar".to_string(), "./bar".to_string()), )]), @@ -661,7 +661,7 @@ if(/x/ === /x/) { "should keep" } let (code, _sourcemap) = transform_js_code( code, None, - HashMap::from([( + HashMap::from_iter([( "foo".to_string(), ("./bar".to_string(), "./bar".to_string()), )]), @@ -690,7 +690,7 @@ if (/x/ === /x/) "should keep"; } "# .trim(); - let (_code, _sourcemap) = transform_js_code(code, None, HashMap::from([])); + let (_code, _sourcemap) = transform_js_code(code, None, HashMap::from_iter([])); } #[test] @@ -705,7 +705,7 @@ const fs3 = require('fs/promises'); console.log(fs1, fs2, fs3); "# .trim(); - let (code, _sourcemap) = transform_js_code(code, None, HashMap::from([])); + let (code, _sourcemap) = transform_js_code(code, None, HashMap::from_iter([])); assert_eq!( code, @@ -732,7 +732,7 @@ console.log(_nodefs.default, fs2, fs3); const require = window.require; "# .trim(); - let (code, _sourcemap) = transform_js_code(code, None, HashMap::from([])); + let (code, _sourcemap) = transform_js_code(code, None, HashMap::from_iter([])); assert_eq!( code, @@ -778,7 +778,7 @@ const require = window.require; root: root.clone(), module_graph: RwLock::new(ModuleGraph::new()), chunk_graph: RwLock::new(chunk_graph), - assets_info: Mutex::new(HashMap::new()), + assets_info: Mutex::new(HashMap::default()), modules_with_missing_deps: RwLock::new(Vec::new()), meta: Meta::new(), plugin_driver: Default::default(), @@ -823,7 +823,7 @@ const require = window.require; ast: &mut ast, dep_map: &DependenciesToReplace { resolved: dep, - missing: HashMap::new(), + missing: HashMap::default(), ignored: vec![], }, async_deps: &vec![], diff --git a/crates/mako/src/transform_in_generate.rs b/crates/mako/src/transform_in_generate.rs index 14e85616a..b918f45ed 100644 --- a/crates/mako/src/transform_in_generate.rs +++ b/crates/mako/src/transform_in_generate.rs @@ -1,8 +1,8 @@ -use std::collections::{HashMap, HashSet}; use std::sync::Arc; use std::time::Instant; use mako_core::anyhow::Result; +use mako_core::collections::{HashMap, HashSet}; use mako_core::swc_common::errors::HANDLER; use mako_core::swc_common::GLOBALS; use mako_core::swc_css_visit::VisitMutWith as CSSVisitMutWith; @@ -64,7 +64,7 @@ fn mark_async( context: &Arc, ) -> HashMap> { mako_core::mako_profile_function!(); - let mut async_deps_by_module_id = HashMap::new(); + let mut async_deps_by_module_id = HashMap::default(); let mut module_graph = context.module_graph.write().unwrap(); // TODO: 考虑成环的场景 module_ids.iter().for_each(|module_id| { @@ -157,7 +157,8 @@ pub fn transform_modules_in_thread( } drop(rs); - let mut transform_map: HashMap>)> = HashMap::new(); + let mut transform_map: HashMap>)> = + HashMap::default(); for r in rr { let (module_id, ast, swc_helpers) = r?; transform_map.insert(module_id, (ast, swc_helpers)); diff --git a/crates/mako/src/transformers/transform_dep_replacer.rs b/crates/mako/src/transformers/transform_dep_replacer.rs index 63a999be8..3c6c61c70 100644 --- a/crates/mako/src/transformers/transform_dep_replacer.rs +++ b/crates/mako/src/transformers/transform_dep_replacer.rs @@ -1,6 +1,6 @@ -use std::collections::HashMap; use std::sync::Arc; +use mako_core::collections::HashMap; use mako_core::swc_common::{Mark, DUMMY_SP}; use mako_core::swc_ecma_ast::{ AssignOp, BlockStmt, Expr, ExprOrSpread, FnExpr, Function, Ident, ImportDecl, Lit, NamedExport, @@ -233,13 +233,13 @@ pub fn resolve_web_worker_mut(new_expr: &mut NewExpr, unresolved_mark: Mark) -> #[cfg(test)] mod tests { - use std::collections::HashMap; use std::sync::Arc; + use mako_core::collections::HashMap; + use mako_core::hashmap; use mako_core::swc_common::{chain, GLOBALS}; use mako_core::swc_ecma_transforms::resolver; use mako_core::swc_ecma_visit::VisitMut; - use maplit::hashmap; use crate::assert_display_snapshot; use crate::ast::build_js_ast; @@ -264,7 +264,7 @@ mod tests { "/root/node_modules/react/index.js".to_string() ) }, - missing: HashMap::new(), + missing: HashMap::default(), ignored: vec![], }; @@ -306,7 +306,7 @@ mod tests { build_js_ast("index.jsx", r#"require("react")"#, &context.clone()).unwrap(); let to_replace = DependenciesToReplace { - resolved: HashMap::new(), + resolved: HashMap::default(), missing: hashmap! {"react".to_string() => Dependency { resolve_type: ResolveType::Import, source: "react".to_string(), @@ -352,7 +352,7 @@ mod tests { .unwrap(); let to_replace = DependenciesToReplace { - resolved: HashMap::new(), + resolved: HashMap::default(), missing: hashmap! {"react".to_string() => Dependency { resolve_type: ResolveType::Import, source: "react".to_string(), diff --git a/crates/mako/src/transformers/transform_env_replacer.rs b/crates/mako/src/transformers/transform_env_replacer.rs index 2ad659634..02d91954e 100644 --- a/crates/mako/src/transformers/transform_env_replacer.rs +++ b/crates/mako/src/transformers/transform_env_replacer.rs @@ -1,7 +1,7 @@ -use std::collections::HashMap; use std::sync::Arc; use mako_core::anyhow::{anyhow, Result}; +use mako_core::collections::HashMap; use mako_core::serde_json::Value; use mako_core::swc_atoms::{js_word, JsWord}; use mako_core::swc_common::collections::AHashMap; @@ -253,10 +253,10 @@ fn get_env_expr(v: Value, context: &Arc) -> Result { mod tests { use std::sync::Arc; + use mako_core::hashmap; use mako_core::serde_json::json; use mako_core::swc_common::{Globals, GLOBALS}; use mako_core::swc_ecma_visit::VisitMutWith; - use maplit::hashmap; use super::EnvReplacer; use crate::ast::{build_js_ast, js_ast_to_code}; diff --git a/crates/mako/src/transformers/transform_optimize_package_imports.rs b/crates/mako/src/transformers/transform_optimize_package_imports.rs index 62b320a30..a37f797ae 100644 --- a/crates/mako/src/transformers/transform_optimize_package_imports.rs +++ b/crates/mako/src/transformers/transform_optimize_package_imports.rs @@ -1,8 +1,8 @@ -use std::collections::HashMap; use std::sync::Arc; use cached::proc_macro::cached; use mako_core::anyhow::Result; +use mako_core::collections::HashMap; use mako_core::nodejs_resolver::DescriptionData; use mako_core::swc_common::DUMMY_SP; use mako_core::swc_ecma_ast::{ @@ -242,8 +242,8 @@ fn parse_barrel_file( return Ok(None); } // build hash maps - let mut export_infos = HashMap::new(); - let mut import_infos = HashMap::new(); + let mut export_infos = HashMap::default(); + let mut import_infos = HashMap::default(); info.import_map.iter().for_each(|import| { import .specifiers @@ -260,7 +260,7 @@ fn parse_barrel_file( } }); }); - let mut resolver_resource_infos = HashMap::new(); + let mut resolver_resource_infos = HashMap::default(); deps.iter().for_each(|dep| { resolver_resource_infos.insert(dep.1.source.clone(), dep.0.clone()); }); diff --git a/crates/mako/src/transformers/transform_provide.rs b/crates/mako/src/transformers/transform_provide.rs index fefc15896..5b1466516 100644 --- a/crates/mako/src/transformers/transform_provide.rs +++ b/crates/mako/src/transformers/transform_provide.rs @@ -73,8 +73,7 @@ impl VisitMut for Provide { #[cfg(test)] mod tests { - use std::collections::HashMap; - + use mako_core::collections::HashMap; use swc_core::common::Mark; #[test] @@ -97,7 +96,7 @@ function foo() { fn transform(code: &str) -> String { let context = std::sync::Arc::new(Default::default()); - let mut providers = HashMap::new(); + let mut providers = HashMap::default(); providers.insert("process".into(), ("process".into(), "".into())); providers.insert("Buffer".into(), ("buffer".into(), "Buffer".into())); let mut visitor = super::Provide::new(providers, Mark::root()); diff --git a/crates/mako/src/tree_shaking/analyze_statement.rs b/crates/mako/src/tree_shaking/analyze_statement.rs index 8dd4f0e36..a5d4d215c 100644 --- a/crates/mako/src/tree_shaking/analyze_statement.rs +++ b/crates/mako/src/tree_shaking/analyze_statement.rs @@ -1,5 +1,4 @@ -use std::collections::HashSet; - +use mako_core::collections::HashSet; use mako_core::swc_ecma_ast; use mako_core::swc_ecma_ast::{ModuleExportName, ModuleItem}; use mako_core::swc_ecma_visit::VisitWith; @@ -15,8 +14,8 @@ use crate::tree_shaking::used_ident_collector::UsedIdentCollector; * 分析当前传入的 esm ast,返回 StatementType */ pub fn analyze_statement(id: StatementId, statement: &ModuleItem) -> StatementType { - let mut top_level_defined_ident = HashSet::new(); - let mut used_ident = HashSet::new(); + let mut top_level_defined_ident = HashSet::default(); + let mut used_ident = HashSet::default(); let mut is_self_executed = false; let mut analyze_used_ident_from_statement = diff --git a/crates/mako/src/tree_shaking/defined_ident_collector.rs b/crates/mako/src/tree_shaking/defined_ident_collector.rs index 220cae53c..c4bf188fd 100644 --- a/crates/mako/src/tree_shaking/defined_ident_collector.rs +++ b/crates/mako/src/tree_shaking/defined_ident_collector.rs @@ -1,5 +1,4 @@ -use std::collections::HashSet; - +use mako_core::collections::HashSet; use mako_core::swc_ecma_ast::{ObjectPatProp, Pat}; use mako_core::swc_ecma_visit::{Visit, VisitWith}; @@ -14,8 +13,8 @@ pub struct DefinedIdentCollector { impl DefinedIdentCollector { pub fn new() -> Self { Self { - defined_ident: HashSet::new(), - used_ident: HashSet::new(), + defined_ident: HashSet::default(), + used_ident: HashSet::default(), } } } diff --git a/crates/mako/src/tree_shaking/statement.rs b/crates/mako/src/tree_shaking/statement.rs index 8ed3f0d5f..ae642b856 100644 --- a/crates/mako/src/tree_shaking/statement.rs +++ b/crates/mako/src/tree_shaking/statement.rs @@ -1,4 +1,4 @@ -use std::collections::HashSet; +use mako_core::collections::HashSet; #[derive(Debug, Clone)] pub enum ImportSpecifier { diff --git a/crates/mako/src/tree_shaking/statement_graph.rs b/crates/mako/src/tree_shaking/statement_graph.rs index facb3f2c9..bb5bd8b9b 100644 --- a/crates/mako/src/tree_shaking/statement_graph.rs +++ b/crates/mako/src/tree_shaking/statement_graph.rs @@ -1,6 +1,6 @@ -use std::collections::{HashMap, HashSet}; use std::fmt; +use mako_core::collections::{HashMap, HashSet}; use mako_core::petgraph::stable_graph::{NodeIndex, StableDiGraph}; use mako_core::petgraph::visit::{EdgeRef, IntoEdgeReferences}; use mako_core::swc_ecma_ast::Module; @@ -25,7 +25,7 @@ pub struct StatementGraph { impl StatementGraph { pub fn new(module: &Module) -> Self { let mut graph = StableDiGraph::new(); - let mut id_index_map = HashMap::new(); + let mut id_index_map = HashMap::default(); // 只分析 body 顶层的声明语句 for (index, statement) in module.body.iter().enumerate() { @@ -46,7 +46,7 @@ impl StatementGraph { pub fn empty() -> Self { Self { graph: StableDiGraph::new(), - id_index_map: HashMap::new(), + id_index_map: HashMap::default(), } } @@ -95,7 +95,7 @@ impl StatementGraph { let mut edges_to_add = Vec::new(); for statement in self.get_statements() { for def_statement in self.get_statements() { - let mut deps_ident = HashSet::new(); + let mut deps_ident = HashSet::default(); for def_ident in def_statement.get_defined_ident() { if let Some(used_ident) = statement.get_used_ident() { if used_ident.contains(def_ident) { diff --git a/crates/mako/src/tree_shaking/tree_shaking.rs b/crates/mako/src/tree_shaking/tree_shaking.rs index 2cedaa620..93c265efb 100644 --- a/crates/mako/src/tree_shaking/tree_shaking.rs +++ b/crates/mako/src/tree_shaking/tree_shaking.rs @@ -1,5 +1,4 @@ -use std::collections::HashMap; - +use mako_core::collections::HashMap; use mako_core::swc_ecma_visit::VisitMutWith; use mako_core::tracing::debug; @@ -218,7 +217,7 @@ impl Compiler { sorted_modules: Vec, ) -> (Vec, HashMap) { let mut tree_shaking_module_ids = vec![]; - let mut tree_shaking_module_map = HashMap::new(); + let mut tree_shaking_module_map = HashMap::default(); for module_id in sorted_modules { let mut dependencies_of_module: Vec = vec![]; { diff --git a/crates/mako/src/tree_shaking/tree_shaking_analyze.rs b/crates/mako/src/tree_shaking/tree_shaking_analyze.rs index abb47b9fb..4f9884afa 100644 --- a/crates/mako/src/tree_shaking/tree_shaking_analyze.rs +++ b/crates/mako/src/tree_shaking/tree_shaking_analyze.rs @@ -1,4 +1,4 @@ -use std::collections::HashMap; +use mako_core::collections::HashMap; use crate::compiler::Compiler; use crate::module::ModuleId; diff --git a/crates/mako/src/tree_shaking/tree_shaking_module.rs b/crates/mako/src/tree_shaking/tree_shaking_module.rs index af58a5f5c..4aa4b4d98 100644 --- a/crates/mako/src/tree_shaking/tree_shaking_module.rs +++ b/crates/mako/src/tree_shaking/tree_shaking_module.rs @@ -1,6 +1,6 @@ -use std::collections::{HashMap, HashSet}; use std::{fmt, vec}; +use mako_core::collections::{HashMap, HashSet}; use mako_core::tracing::Level; use mako_core::{swc_ecma_ast, tracing}; @@ -118,7 +118,7 @@ impl UsedReExportHashMap { } #[allow(dead_code)] pub fn get_all_used_statement_ids(&self) -> HashSet { - let mut ids = HashSet::new(); + let mut ids = HashSet::default(); self.0 .iter() .for_each(|(export_statement_id, import_statement)| { @@ -182,8 +182,8 @@ impl TreeShakingModule { #[allow(dead_code)] pub fn get_used_re_exports(&self) -> UsedReExportHashMap { - let mut used_export_statement_hashmap = HashMap::new(); - let mut keys = HashSet::new(); + let mut used_export_statement_hashmap = HashMap::default(); + let mut keys = HashSet::default(); self.get_used_export_ident() .into_iter() .for_each(|(_, id)| { @@ -216,7 +216,7 @@ impl TreeShakingModule { #[tracing::instrument(ret(level = Level::DEBUG),skip(self))] pub fn get_used_export_statement(&self) -> UsedIdentHashMap { let used_exports_ident = self.get_used_export_ident(); - let mut stmt_used_ident_map: HashMap> = HashMap::new(); + let mut stmt_used_ident_map: HashMap> = HashMap::default(); for (used_ident, stmt_id) in &used_exports_ident { let used_idents: &mut HashSet = @@ -232,12 +232,12 @@ impl TreeShakingModule { let deps = self.statement_graph.get_dependencies(id); // 当前导出是 reexport - if is_re_export(stmt, &mut HashMap::new(), deps) { + if is_re_export(stmt, &mut HashMap::default(), deps) { re_export_ids.push(id); } // 查找当前的依赖变量 - let mut visited = HashSet::new(); + let mut visited = HashSet::default(); self.analyze_statement_used_ident(&mut stmt_used_ident_map, stmt, &mut visited); } @@ -255,8 +255,8 @@ impl TreeShakingModule { for stmt in &all_stmts { let is_final_side_effects_flag = stmt.get_is_self_executed(); if is_final_side_effects_flag { - let mut visited = HashSet::new(); - let mut current_used_ident_map = HashMap::new(); + let mut visited = HashSet::default(); + let mut current_used_ident_map = HashMap::default(); self.analyze_statement_used_ident(&mut current_used_ident_map, stmt, &mut visited); let side_effects_available_ids = current_used_ident_map @@ -532,9 +532,10 @@ pub fn should_skip(url: &str) -> bool { #[cfg(test)] mod tests { - use std::collections::HashSet; use std::path::PathBuf; + use mako_core::collections::HashSet; + use super::TreeShakingModule; use crate::test_helper::create_mock_module; use crate::tree_shaking::tree_shaking_module::{UsedExports, UsedIdent}; diff --git a/crates/mako/src/tree_shaking/unused_statement_marker.rs b/crates/mako/src/tree_shaking/unused_statement_marker.rs index f928562c7..d895d1475 100644 --- a/crates/mako/src/tree_shaking/unused_statement_marker.rs +++ b/crates/mako/src/tree_shaking/unused_statement_marker.rs @@ -1,5 +1,4 @@ -use std::collections::HashSet; - +use mako_core::collections::HashSet; use mako_core::swc_ecma_ast; use mako_core::swc_ecma_ast::{Decl, ExportDecl, ImportDecl, ModuleExportName, VarDeclarator}; use mako_core::swc_ecma_visit::{VisitMut, VisitMutWith, VisitWith}; @@ -54,7 +53,7 @@ impl VisitMut for UnusedStatementMarker<'_, '_> { // 清理 export { } 这里面的变量 fn visit_mut_export_specifiers(&mut self, specifiers: &mut Vec) { - for (_, specifier) in specifiers.iter().enumerate() { + for specifier in specifiers.iter() { match specifier { swc_ecma_ast::ExportSpecifier::Namespace(_) => {} swc_ecma_ast::ExportSpecifier::Default(_) => {} diff --git a/crates/mako/src/tree_shaking/used_ident_collector.rs b/crates/mako/src/tree_shaking/used_ident_collector.rs index 1c5dfcf04..d509c9ef8 100644 --- a/crates/mako/src/tree_shaking/used_ident_collector.rs +++ b/crates/mako/src/tree_shaking/used_ident_collector.rs @@ -1,5 +1,4 @@ -use std::collections::HashSet; - +use mako_core::collections::HashSet; use mako_core::swc_ecma_ast::{Decl, Ident}; use mako_core::swc_ecma_visit::{Visit, VisitWith}; @@ -11,8 +10,8 @@ use crate::tree_shaking::defined_ident_collector::DefinedIdentCollector; impl UsedIdentCollector { pub fn new() -> Self { Self { - used_ident: HashSet::new(), - defined_ident: HashSet::new(), + used_ident: HashSet::default(), + defined_ident: HashSet::default(), } } } diff --git a/crates/mako/src/update.rs b/crates/mako/src/update.rs index 2662b703a..edda1c9a2 100644 --- a/crates/mako/src/update.rs +++ b/crates/mako/src/update.rs @@ -1,9 +1,9 @@ -use std::collections::{HashMap, HashSet}; use std::fmt; use std::fmt::Debug; use std::path::PathBuf; use mako_core::anyhow::{anyhow, Ok, Result}; +use mako_core::collections::{HashMap, HashSet}; use mako_core::rayon::prelude::*; use mako_core::tracing::debug; @@ -303,7 +303,7 @@ impl Compiler { .collect(); drop(module_graph); - let mut add_modules: HashMap = HashMap::new(); + let mut add_modules: HashMap = HashMap::default(); let mut target_dependencies: Vec<(ModuleId, Dependency)> = vec![]; dependencies.into_iter().for_each(|(resource, dep)| { let resolved_path = resource.get_resolved_path(); @@ -322,7 +322,7 @@ impl Compiler { let result = result?; let mut added = vec![]; - let mut modified_module_ids = HashSet::new(); + let mut modified_module_ids = HashSet::default(); let mut module_graph = self.context.module_graph.write().unwrap(); for (module, add, remove, mut add_modules) in result { @@ -367,8 +367,8 @@ impl Compiler { fn build_by_remove(&self, removed: Vec) -> (HashSet, HashSet) { let mut module_graph = self.context.module_graph.write().unwrap(); - let mut removed_module_ids = HashSet::new(); - let mut affected_module_ids = HashSet::new(); + let mut removed_module_ids = HashSet::default(); + let mut affected_module_ids = HashSet::default(); for path in removed { let module_id = ModuleId::from_path(path); let dependants = module_graph.dependant_module_ids(&module_id); @@ -395,8 +395,8 @@ fn diff(origin: Vec<(ModuleId, Dependency)>, target: Vec<(ModuleId, Dependency)> .iter() .map(|(module_id, _dep)| module_id) .collect::>(); - let mut added: HashSet<(ModuleId, Dependency)> = HashSet::new(); - let mut removed: HashSet<(ModuleId, Dependency)> = HashSet::new(); + let mut added: HashSet<(ModuleId, Dependency)> = HashSet::default(); + let mut removed: HashSet<(ModuleId, Dependency)> = HashSet::default(); target .iter() .filter(|(module_id, _dep)| !origin_module_ids.contains(module_id)) diff --git a/crates/mako/src/watch.rs b/crates/mako/src/watch.rs index 3742a992f..3a48e4d63 100644 --- a/crates/mako/src/watch.rs +++ b/crates/mako/src/watch.rs @@ -1,8 +1,8 @@ -use std::collections::{HashMap, HashSet}; use std::path::{Path, PathBuf}; use std::sync::Arc; use mako_core::anyhow::{self, Ok}; +use mako_core::collections::{HashMap, HashSet}; use mako_core::colored::Colorize; use mako_core::notify::{self, EventKind, Watcher as NotifyWatcher}; use mako_core::notify_debouncer_full::DebouncedEvent; @@ -30,8 +30,8 @@ impl<'a> Watcher<'a> { root, watcher, compiler, - watched_dirs: HashSet::new(), - watched_files: HashSet::new(), + watched_dirs: HashSet::default(), + watched_files: HashSet::default(), } } @@ -46,7 +46,7 @@ impl<'a> Watcher<'a> { self.watch_dir_recursive(self.root.into(), &root_ignore_list)?; let module_graph = self.compiler.context.module_graph.read().unwrap(); - let mut dirs = HashSet::new(); + let mut dirs = HashSet::default(); module_graph.modules().iter().for_each(|module| { if let Some(ResolverResource::Resolved(resource)) = module .info @@ -156,7 +156,7 @@ impl<'a> Watcher<'a> { // TODO: support notify::Event mode pub fn normalize_events(events: Vec) -> Vec { let mut paths = vec![]; - let mut create_paths = HashMap::new(); + let mut create_paths = HashMap::default(); events.iter().for_each(|debounced_event| { let kind = &debounced_event.event.kind; debounced_event.event.paths.iter().for_each(|path| {