Move BoundedSeparated helper functions into ast
This commit is contained in:
parent
58106c4c5a
commit
78d08968eb
2 changed files with 35 additions and 35 deletions
|
|
@ -106,6 +106,40 @@ impl<E> BoundedSeparated<E> {
|
||||||
.push((Space::empty(self.span), elem, Space::empty(self.span)));
|
.push((Space::empty(self.span), elem, Space::empty(self.span)));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn map<E2>(self, f: impl Fn(E) -> E2) -> BoundedSeparated<E2> {
|
||||||
|
let elems = self
|
||||||
|
.elems
|
||||||
|
.into_iter()
|
||||||
|
.map(|(s0, e, s1)| (s0, f(e), s1))
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
BoundedSeparated {
|
||||||
|
elems,
|
||||||
|
trailing: self.trailing,
|
||||||
|
span: self.span,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn remove_map<E1, E2>(
|
||||||
|
self,
|
||||||
|
f: impl Fn(E) -> Result<E1, E2>,
|
||||||
|
) -> (BoundedSeparated<E1>, Vec<(Space, E2, Space)>) {
|
||||||
|
let mut kept = vec![];
|
||||||
|
let mut removed = vec![];
|
||||||
|
for (s0, elem, s1) in self.elems {
|
||||||
|
match f(elem) {
|
||||||
|
Ok(elem) => kept.push((s0, elem, s1)),
|
||||||
|
Err(elem) => removed.push((s0, elem, s1)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let new = BoundedSeparated {
|
||||||
|
elems: kept,
|
||||||
|
trailing: self.trailing,
|
||||||
|
span: self.span,
|
||||||
|
};
|
||||||
|
(new, removed)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BoundedSeparated<TableLitElem> {
|
impl BoundedSeparated<TableLitElem> {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::ast::{BoundedSeparated, Space};
|
use crate::ast::BoundedSeparated;
|
||||||
|
|
||||||
impl<E> BoundedSeparated<E> {
|
impl<E> BoundedSeparated<E> {
|
||||||
pub fn desugar(self, desugar_elem: impl Fn(E) -> (E, bool)) -> (Self, bool) {
|
pub fn desugar(self, desugar_elem: impl Fn(E) -> (E, bool)) -> (Self, bool) {
|
||||||
|
|
@ -21,38 +21,4 @@ impl<E> BoundedSeparated<E> {
|
||||||
};
|
};
|
||||||
(new, desugared)
|
(new, desugared)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn map<E2>(self, f: impl Fn(E) -> E2) -> BoundedSeparated<E2> {
|
|
||||||
let elems = self
|
|
||||||
.elems
|
|
||||||
.into_iter()
|
|
||||||
.map(|(s0, e, s1)| (s0, f(e), s1))
|
|
||||||
.collect::<Vec<_>>();
|
|
||||||
|
|
||||||
BoundedSeparated {
|
|
||||||
elems,
|
|
||||||
trailing: self.trailing,
|
|
||||||
span: self.span,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn remove_map<E1, E2>(
|
|
||||||
self,
|
|
||||||
f: impl Fn(E) -> Result<E1, E2>,
|
|
||||||
) -> (BoundedSeparated<E1>, Vec<(Space, E2, Space)>) {
|
|
||||||
let mut kept = vec![];
|
|
||||||
let mut removed = vec![];
|
|
||||||
for (s0, elem, s1) in self.elems {
|
|
||||||
match f(elem) {
|
|
||||||
Ok(elem) => kept.push((s0, elem, s1)),
|
|
||||||
Err(elem) => removed.push((s0, elem, s1)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let new = BoundedSeparated {
|
|
||||||
elems: kept,
|
|
||||||
trailing: self.trailing,
|
|
||||||
span: self.span,
|
|
||||||
};
|
|
||||||
(new, removed)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue