diff --git a/crates/oxc_semantic/src/post_transform_checker.rs b/crates/oxc_semantic/src/post_transform_checker.rs index 90c551472..c3ec79310 100644 --- a/crates/oxc_semantic/src/post_transform_checker.rs +++ b/crates/oxc_semantic/src/post_transform_checker.rs @@ -85,7 +85,7 @@ //! //! See also: -use std::{cell::Cell, fmt::Debug}; +use std::{cell::Cell, fmt::Debug, hash::Hash}; use oxc_allocator::{Allocator, CloneIn}; #[allow(clippy::wildcard_imports)] @@ -142,9 +142,9 @@ pub fn check_semantic_after_transform( let mut checker = PostTransformChecker { after_transform: data_after_transform, rebuilt: data_rebuilt, - scope_ids_map: FxHashMap::default(), - symbol_ids_map: FxHashMap::default(), - reference_ids_map: FxHashMap::default(), + scope_ids_map: IdMapping::default(), + symbol_ids_map: IdMapping::default(), + reference_ids_map: IdMapping::default(), errors: Errors::default(), }; checker.create_mappings(); @@ -159,9 +159,9 @@ struct PostTransformChecker<'s> { after_transform: SemanticData<'s>, rebuilt: SemanticData<'s>, // Mappings from after transform ID to rebuilt ID - scope_ids_map: FxHashMap, - symbol_ids_map: FxHashMap, - reference_ids_map: FxHashMap, + scope_ids_map: IdMapping, + symbol_ids_map: IdMapping, + reference_ids_map: IdMapping, errors: Errors, } @@ -171,6 +171,25 @@ struct SemanticData<'s> { ids: SemanticIds, } +/// Mapping from "after transform" ID to "rebuilt" ID +struct IdMapping(FxHashMap); + +impl IdMapping { + fn insert(&mut self, after_transform_id: Id, rebuilt_id: Id) { + self.0.insert(after_transform_id, rebuilt_id); + } + + fn get(&self, after_transform_id: Id) -> Option { + self.0.get(&after_transform_id).copied() + } +} + +impl Default for IdMapping { + fn default() -> Self { + Self(FxHashMap::default()) + } +} + /// Pair of values from after transform and rebuilt struct Pair { after_transform: T, @@ -339,7 +358,7 @@ impl<'s> PostTransformChecker<'s> { let mut symbol_ids_after_transform = symbol_ids .after_transform .iter() - .map(|symbol_id| self.symbol_ids_map.get(symbol_id).copied()) + .map(|&symbol_id| self.symbol_ids_map.get(symbol_id)) .collect::>(); symbol_ids_after_transform.sort_unstable(); let mut symbol_ids_rebuilt = symbol_ids @@ -406,7 +425,7 @@ impl<'s> PostTransformChecker<'s> { let mut child_ids_after_transform = child_ids .after_transform .iter() - .map(|child_id| self.scope_ids_map.get(child_id).copied()) + .map(|&child_id| self.scope_ids_map.get(child_id)) .collect::>(); child_ids_after_transform.sort_unstable(); let mut child_ids_rebuilt = @@ -521,10 +540,7 @@ impl<'s> PostTransformChecker<'s> { /// Map `after_transform` scope ID to `rebuilt` scope ID fn remap_scope_ids(&self, scope_ids: Pair) -> Pair> { - Pair::new( - self.scope_ids_map.get(&scope_ids.after_transform).copied(), - Some(scope_ids.rebuilt), - ) + Pair::new(self.scope_ids_map.get(scope_ids.after_transform), Some(scope_ids.rebuilt)) } }