Skip to content

Commit 9ded9fb

Browse files
committed
refactor: exact alloc for HashSet and HashMap
1 parent 90e4f1f commit 9ded9fb

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

crates/biome_deserialize/src/impls.rs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ impl<T: Deserializable> Deserializable for Vec<T> {
514514
_range: TextRange,
515515
_name: &str,
516516
) -> Option<Self::Output> {
517-
let mut result = Vec::with_capacity(values.len());
517+
let mut result = Self::Output::with_capacity(values.len());
518518
result.extend(
519519
values.filter_map(|value| Deserializable::deserialize(ctx, &value?, "")),
520520
);
@@ -583,11 +583,11 @@ impl<T: Deserializable + Eq + Hash, S: BuildHasher + Default> Deserializable for
583583
_range: TextRange,
584584
_name: &str,
585585
) -> Option<Self::Output> {
586-
Some(
587-
values
588-
.filter_map(|value| Deserializable::deserialize(ctx, &value?, ""))
589-
.collect(),
590-
)
586+
let mut result = Self::Output::with_capacity_and_hasher(values.len(), S::default());
587+
result.extend(
588+
values.filter_map(|value| Deserializable::deserialize(ctx, &value?, "")),
589+
);
590+
Some(result)
591591
}
592592
}
593593
value.deserialize(ctx, Visitor(PhantomData), name)
@@ -640,7 +640,7 @@ impl<T: Hash + Eq + Deserializable> Deserializable for indexmap::IndexSet<T> {
640640
_range: TextRange,
641641
_name: &str,
642642
) -> Option<Self::Output> {
643-
let mut result = indexmap::IndexSet::with_capacity(values.len());
643+
let mut result = Self::Output::with_capacity(values.len());
644644
result.extend(
645645
values.filter_map(|value| Deserializable::deserialize(ctx, &value?, "")),
646646
);
@@ -674,7 +674,8 @@ impl<K: Hash + Eq + Deserializable, V: Deserializable, S: Default + BuildHasher>
674674
_range: TextRange,
675675
_name: &str,
676676
) -> Option<Self::Output> {
677-
let mut result = Self::Output::default();
677+
let mut result =
678+
Self::Output::with_capacity_and_hasher(members.len(), S::default());
678679
for (key, value) in members.flatten() {
679680
let key = Deserializable::deserialize(ctx, &key, "");
680681
let value = Deserializable::deserialize(ctx, &value, "");
@@ -747,7 +748,8 @@ impl<K: Hash + Eq + Deserializable, V: Deserializable, S: Default + BuildHasher>
747748
_range: TextRange,
748749
_name: &str,
749750
) -> Option<Self::Output> {
750-
let mut result = Self::Output::default();
751+
let mut result =
752+
Self::Output::with_capacity_and_hasher(members.len(), S::default());
751753
for (key, value) in members.flatten() {
752754
let key = Deserializable::deserialize(ctx, &key, "");
753755
let value = Deserializable::deserialize(ctx, &value, "");

0 commit comments

Comments
 (0)