Skip to content

Commit 4023b41

Browse files
authored
refactor!: Trim trait bounds on iterator return types (#721)
- Remove `FusedIterator` bound, which was redundant. (User code never needs to bind on `FusedIterator`, that trait is only used by the standard library for specialization.) - Remove redundant `+ 'a` bounds. - Remove redundant `Item = ...` from `ExactSizeIterator` bounds (there's no need to specify them twice).
1 parent 7d8c55e commit 4023b41

3 files changed

Lines changed: 22 additions & 64 deletions

File tree

consumer/src/node.rs

Lines changed: 17 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use alloc::{
1717
vec,
1818
vec::Vec,
1919
};
20-
use core::{fmt, iter::FusedIterator};
20+
use core::fmt;
2121

2222
use crate::filters::FilterResult;
2323
use crate::iterators::{
@@ -150,11 +150,7 @@ impl<'a> Node<'a> {
150150

151151
pub fn child_ids(
152152
&self,
153-
) -> impl DoubleEndedIterator<Item = NodeId>
154-
+ ExactSizeIterator<Item = NodeId>
155-
+ FusedIterator<Item = NodeId>
156-
+ 'a
157-
+ use<'a> {
153+
) -> impl DoubleEndedIterator<Item = NodeId> + ExactSizeIterator + use<'a> {
158154
if self.is_graft() {
159155
ChildIds::Graft(self.graft_child_id())
160156
} else {
@@ -167,81 +163,58 @@ impl<'a> Node<'a> {
167163

168164
pub fn children(
169165
&self,
170-
) -> impl DoubleEndedIterator<Item = Node<'a>>
171-
+ ExactSizeIterator<Item = Node<'a>>
172-
+ FusedIterator<Item = Node<'a>>
173-
+ 'a
174-
+ use<'a> {
166+
) -> impl DoubleEndedIterator<Item = Node<'a>> + ExactSizeIterator + use<'a> {
175167
let state = self.tree_state;
176168
self.child_ids()
177169
.map(move |id| state.node_by_id(id).unwrap())
178170
}
179171

180-
pub fn filtered_children<F: Fn(&Node) -> FilterResult + 'a>(
172+
pub fn filtered_children<F: Fn(&Node) -> FilterResult>(
181173
&self,
182174
filter: F,
183-
) -> impl DoubleEndedIterator<Item = Node<'a>> + FusedIterator<Item = Node<'a>> + use<'a, F>
184-
{
175+
) -> impl DoubleEndedIterator<Item = Node<'a>> + use<'a, F> {
185176
FilteredChildren::new(*self, filter)
186177
}
187178

188179
pub fn following_sibling_ids(
189180
&self,
190-
) -> impl DoubleEndedIterator<Item = NodeId>
191-
+ ExactSizeIterator<Item = NodeId>
192-
+ FusedIterator<Item = NodeId>
193-
+ 'a
194-
+ use<'a> {
181+
) -> impl DoubleEndedIterator<Item = NodeId> + ExactSizeIterator + use<'a> {
195182
FollowingSiblings::new(*self)
196183
}
197184

198185
pub fn following_siblings(
199186
&self,
200-
) -> impl DoubleEndedIterator<Item = Node<'a>>
201-
+ ExactSizeIterator<Item = Node<'a>>
202-
+ FusedIterator<Item = Node<'a>>
203-
+ 'a
204-
+ use<'a> {
187+
) -> impl DoubleEndedIterator<Item = Node<'a>> + ExactSizeIterator + use<'a> {
205188
let state = self.tree_state;
206189
self.following_sibling_ids()
207190
.map(move |id| state.node_by_id(id).unwrap())
208191
}
209192

210-
pub fn following_filtered_siblings<F: Fn(&Node) -> FilterResult + 'a>(
193+
pub fn following_filtered_siblings<F: Fn(&Node) -> FilterResult>(
211194
&self,
212195
filter: F,
213-
) -> impl DoubleEndedIterator<Item = Node<'a>> + FusedIterator<Item = Node<'a>> + use<'a, F>
214-
{
196+
) -> impl DoubleEndedIterator<Item = Node<'a>> + use<'a, F> {
215197
FollowingFilteredSiblings::new(*self, filter)
216198
}
217199

218200
pub fn preceding_sibling_ids(
219201
&self,
220-
) -> impl DoubleEndedIterator<Item = NodeId>
221-
+ ExactSizeIterator<Item = NodeId>
222-
+ FusedIterator<Item = NodeId>
223-
+ 'a
224-
+ use<'a> {
202+
) -> impl DoubleEndedIterator<Item = NodeId> + ExactSizeIterator + use<'a> {
225203
PrecedingSiblings::new(*self)
226204
}
227205

228206
pub fn preceding_siblings(
229207
&self,
230-
) -> impl DoubleEndedIterator<Item = Node<'a>>
231-
+ ExactSizeIterator<Item = Node<'a>>
232-
+ FusedIterator<Item = Node<'a>>
233-
+ 'a
234-
+ use<'a> {
208+
) -> impl DoubleEndedIterator<Item = Node<'a>> + ExactSizeIterator + use<'a> {
235209
let state = self.tree_state;
236210
self.preceding_sibling_ids()
237211
.map(move |id| state.node_by_id(id).unwrap())
238212
}
239213

240-
pub fn preceding_filtered_siblings<F: Fn(&Node) -> FilterResult + 'a>(
214+
pub fn preceding_filtered_siblings<F: Fn(&Node) -> FilterResult>(
241215
&self,
242216
filter: F,
243-
) -> impl DoubleEndedIterator<Item = Node<'a>> + FusedIterator<Item = Node<'a>> + use<'a, F>
244-
{
217+
) -> impl DoubleEndedIterator<Item = Node<'a>> + use<'a, F> {
245218
PrecedingFilteredSiblings::new(*self, filter)
246219
}
247220

@@ -726,10 +699,7 @@ fn descendant_label_filter(node: &Node) -> FilterResult {
726699
}
727700

728701
impl<'a> Node<'a> {
729-
pub fn labelled_by(
730-
&self,
731-
) -> impl DoubleEndedIterator<Item = Node<'a>> + FusedIterator<Item = Node<'a>> + 'a + use<'a>
732-
{
702+
pub fn labelled_by(&self) -> impl DoubleEndedIterator<Item = Node<'a>> + use<'a> {
733703
let explicit = &self.state.data.labelled_by();
734704
if explicit.is_empty()
735705
&& matches!(
@@ -967,10 +937,7 @@ impl<'a> Node<'a> {
967937
)
968938
}
969939

970-
pub fn controls(
971-
&self,
972-
) -> impl DoubleEndedIterator<Item = Node<'a>> + FusedIterator<Item = Node<'a>> + 'a + use<'a>
973-
{
940+
pub fn controls(&self) -> impl DoubleEndedIterator<Item = Node<'a>> + use<'a> {
974941
let state = self.tree_state;
975942
let id = self.id;
976943
let data = &self.state.data;
@@ -1066,11 +1033,10 @@ impl<'a> Node<'a> {
10661033
})
10671034
}
10681035

1069-
pub fn items<F: Fn(&Node) -> FilterResult + 'a>(
1036+
pub fn items<F: Fn(&Node) -> FilterResult>(
10701037
&self,
10711038
filter: F,
1072-
) -> impl DoubleEndedIterator<Item = Node<'a>> + FusedIterator<Item = Node<'a>> + use<'a, F>
1073-
{
1039+
) -> impl DoubleEndedIterator<Item = Node<'a>> + use<'a, F> {
10741040
self.filtered_children(move |child| match filter(child) {
10751041
FilterResult::Include if child.is_item_like() => FilterResult::Include,
10761042
FilterResult::Include => FilterResult::ExcludeNode,

consumer/src/text.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use accesskit::{
88
TextPosition as WeakPosition, TextSelection, VerticalOffset,
99
};
1010
use alloc::{string::String, vec::Vec};
11-
use core::{cmp::Ordering, fmt, iter::FusedIterator};
11+
use core::{cmp::Ordering, fmt};
1212

1313
use crate::{FilterResult, Node, TreeState, node::NodeId};
1414

@@ -1378,28 +1378,23 @@ impl<'a> Node<'a> {
13781378
// TODO: more attributes
13791379
}
13801380

1381-
pub(crate) fn text_runs(
1382-
&self,
1383-
) -> impl DoubleEndedIterator<Item = Node<'a>> + FusedIterator<Item = Node<'a>> + 'a + use<'a>
1384-
{
1381+
pub(crate) fn text_runs(&self) -> impl DoubleEndedIterator<Item = Node<'a>> + use<'a> {
13851382
let id = self.id();
13861383
self.filtered_children(move |node| text_node_filter(id, node))
13871384
}
13881385

13891386
fn following_text_runs(
13901387
&self,
13911388
root_node: &Node,
1392-
) -> impl DoubleEndedIterator<Item = Node<'a>> + FusedIterator<Item = Node<'a>> + 'a + use<'a>
1393-
{
1389+
) -> impl DoubleEndedIterator<Item = Node<'a>> + use<'a> {
13941390
let id = root_node.id();
13951391
self.following_filtered_siblings(move |node| text_node_filter(id, node))
13961392
}
13971393

13981394
fn preceding_text_runs(
13991395
&self,
14001396
root_node: &Node,
1401-
) -> impl DoubleEndedIterator<Item = Node<'a>> + FusedIterator<Item = Node<'a>> + 'a + use<'a>
1402-
{
1397+
) -> impl DoubleEndedIterator<Item = Node<'a>> + use<'a> {
14031398
let id = root_node.id();
14041399
self.preceding_filtered_siblings(move |node| text_node_filter(id, node))
14051400
}

platforms/atspi-common/src/node.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ use atspi_common::{
2020
use std::{
2121
collections::HashMap,
2222
hash::{Hash, Hasher},
23-
iter::FusedIterator,
2423
sync::{Arc, RwLock, RwLockReadGuard, Weak},
2524
};
2625

@@ -56,9 +55,7 @@ impl NodeWrapper<'_> {
5655
self.0.id()
5756
}
5857

59-
fn filtered_child_ids(
60-
&self,
61-
) -> impl DoubleEndedIterator<Item = NodeId> + FusedIterator<Item = NodeId> + '_ {
58+
fn filtered_child_ids(&self) -> impl DoubleEndedIterator<Item = NodeId> {
6259
self.0.filtered_children(&filter).map(|child| child.id())
6360
}
6461

0 commit comments

Comments
 (0)