Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 32 additions & 30 deletions crates/biome_deserialize/src/impls.rs
Original file line number Diff line number Diff line change
Expand Up @@ -510,15 +510,15 @@ impl<T: Deserializable> Deserializable for Vec<T> {
fn visit_array(
self,
ctx: &mut impl DeserializationContext,
values: impl Iterator<Item = Option<impl DeserializableValue>>,
values: impl ExactSizeIterator<Item = Option<impl DeserializableValue>>,
_range: TextRange,
_name: &str,
) -> Option<Self::Output> {
Some(
values
.filter_map(|value| Deserializable::deserialize(ctx, &value?, ""))
.collect(),
)
let mut result = Self::Output::with_capacity(values.len());
result.extend(
values.filter_map(|value| Deserializable::deserialize(ctx, &value?, "")),
);
Some(result)
}
}
value.deserialize(ctx, Visitor(PhantomData), name)
Expand Down Expand Up @@ -549,15 +549,15 @@ impl<T: Deserializable, const L: usize> Deserializable for smallvec::SmallVec<[T
fn visit_array(
self,
ctx: &mut impl DeserializationContext,
values: impl Iterator<Item = Option<impl DeserializableValue>>,
values: impl ExactSizeIterator<Item = Option<impl DeserializableValue>>,
_range: TextRange,
_name: &str,
) -> Option<Self::Output> {
Some(
values
.filter_map(|value| Deserializable::deserialize(ctx, &value?, ""))
.collect(),
)
let mut result = Self::Output::with_capacity(values.len());
result.extend(
values.filter_map(|value| Deserializable::deserialize(ctx, &value?, "")),
);
Some(result)
}
}
value.deserialize(ctx, Visitor(PhantomData), name)
Expand All @@ -579,15 +579,15 @@ impl<T: Deserializable + Eq + Hash, S: BuildHasher + Default> Deserializable for
fn visit_array(
self,
ctx: &mut impl DeserializationContext,
values: impl Iterator<Item = Option<impl DeserializableValue>>,
values: impl ExactSizeIterator<Item = Option<impl DeserializableValue>>,
_range: TextRange,
_name: &str,
) -> Option<Self::Output> {
Some(
values
.filter_map(|value| Deserializable::deserialize(ctx, &value?, ""))
.collect(),
)
let mut result = Self::Output::with_capacity_and_hasher(values.len(), S::default());
result.extend(
values.filter_map(|value| Deserializable::deserialize(ctx, &value?, "")),
);
Some(result)
}
}
value.deserialize(ctx, Visitor(PhantomData), name)
Expand All @@ -607,7 +607,7 @@ impl<T: Ord + Deserializable> Deserializable for BTreeSet<T> {
fn visit_array(
self,
ctx: &mut impl DeserializationContext,
values: impl Iterator<Item = Option<impl DeserializableValue>>,
values: impl ExactSizeIterator<Item = Option<impl DeserializableValue>>,
_range: TextRange,
_name: &str,
) -> Option<Self::Output> {
Expand Down Expand Up @@ -636,15 +636,15 @@ impl<T: Hash + Eq + Deserializable> Deserializable for indexmap::IndexSet<T> {
fn visit_array(
self,
ctx: &mut impl DeserializationContext,
values: impl Iterator<Item = Option<impl DeserializableValue>>,
values: impl ExactSizeIterator<Item = Option<impl DeserializableValue>>,
_range: TextRange,
_name: &str,
) -> Option<Self::Output> {
Some(
values
.filter_map(|value| Deserializable::deserialize(ctx, &value?, ""))
.collect(),
)
let mut result = Self::Output::with_capacity(values.len());
result.extend(
values.filter_map(|value| Deserializable::deserialize(ctx, &value?, "")),
);
Some(result)
}
}
value.deserialize(ctx, Visitor(PhantomData), name)
Expand All @@ -668,13 +668,14 @@ impl<K: Hash + Eq + Deserializable, V: Deserializable, S: Default + BuildHasher>
fn visit_map(
self,
ctx: &mut impl DeserializationContext,
members: impl Iterator<
members: impl ExactSizeIterator<
Item = Option<(impl DeserializableValue, impl DeserializableValue)>,
>,
_range: TextRange,
_name: &str,
) -> Option<Self::Output> {
let mut result = Self::Output::default();
let mut result =
Self::Output::with_capacity_and_hasher(members.len(), S::default());
for (key, value) in members.flatten() {
let key = Deserializable::deserialize(ctx, &key, "");
let value = Deserializable::deserialize(ctx, &value, "");
Expand Down Expand Up @@ -702,7 +703,7 @@ impl<K: Ord + Deserializable, V: Deserializable> Deserializable for BTreeMap<K,
fn visit_map(
self,
ctx: &mut impl DeserializationContext,
members: impl Iterator<
members: impl ExactSizeIterator<
Item = Option<(impl DeserializableValue, impl DeserializableValue)>,
>,
_range: TextRange,
Expand Down Expand Up @@ -741,13 +742,14 @@ impl<K: Hash + Eq + Deserializable, V: Deserializable, S: Default + BuildHasher>
fn visit_map(
self,
ctx: &mut impl DeserializationContext,
members: impl Iterator<
members: impl ExactSizeIterator<
Item = Option<(impl DeserializableValue, impl DeserializableValue)>,
>,
_range: TextRange,
_name: &str,
) -> Option<Self::Output> {
let mut result = Self::Output::default();
let mut result =
Self::Output::with_capacity_and_hasher(members.len(), S::default());
for (key, value) in members.flatten() {
let key = Deserializable::deserialize(ctx, &key, "");
let value = Deserializable::deserialize(ctx, &value, "");
Expand Down
6 changes: 4 additions & 2 deletions crates/biome_deserialize/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@ pub trait DeserializationVisitor: Sized {
fn visit_array(
self,
ctx: &mut impl DeserializationContext,
_items: impl Iterator<Item = Option<impl DeserializableValue>>,
_items: impl ExactSizeIterator<Item = Option<impl DeserializableValue>>,
range: TextRange,
name: &str,
) -> Option<Self::Output> {
Expand All @@ -422,7 +422,9 @@ pub trait DeserializationVisitor: Sized {
fn visit_map(
self,
ctx: &mut impl DeserializationContext,
_members: impl Iterator<Item = Option<(impl DeserializableValue, impl DeserializableValue)>>,
_members: impl ExactSizeIterator<
Item = Option<(impl DeserializableValue, impl DeserializableValue)>,
>,
range: TextRange,
name: &str,
) -> Option<Self::Output> {
Expand Down
22 changes: 22 additions & 0 deletions crates/biome_rowan/src/ast/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -683,6 +683,19 @@ impl<L: Language, N: AstNode<Language = L>> Iterator for AstSeparatedListElement
trailing_separator: separator,
})
}

fn size_hint(&self) -> (usize, Option<usize>) {
let len = self.slots.len();
// Each element typically consumes 2 slots (node + separator),
// but the last element may have only 1 slot (node without trailing separator)
let len = len.div_ceil(2);
(len, Some(len))
}
}

impl<L: Language, N: AstNode<Language = L>> ExactSizeIterator
for AstSeparatedListElementsIterator<L, N>
{
}

impl<L: Language, N: AstNode<Language = L>> FusedIterator
Expand Down Expand Up @@ -736,6 +749,15 @@ impl<L: Language, N: AstNode<Language = L>> Iterator for AstSeparatedListNodesIt
fn next(&mut self) -> Option<Self::Item> {
self.inner.next().map(|element| element.node)
}

fn size_hint(&self) -> (usize, Option<usize>) {
self.inner.size_hint()
}
}

impl<L: Language, N: AstNode<Language = L>> ExactSizeIterator
for AstSeparatedListNodesIterator<L, N>
{
}

impl<L: Language, N: AstNode<Language = L>> FusedIterator for AstSeparatedListNodesIterator<L, N> {}
Expand Down
Loading