Skip to content

Commit 9435e88

Browse files
committed
transpile: refactor comma_separated to use itertools::intersperse
1 parent 595f415 commit 9435e88

File tree

3 files changed

+12
-26
lines changed

3 files changed

+12
-26
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

c2rust-ast-builder/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ keywords.workspace = true
1212
categories.workspace = true
1313

1414
[dependencies]
15+
itertools = "0.10.0"
1516
proc-macro2 = { version = "1.0", features = ["span-locations"]}
1617
syn = { version = "2.0", features = ["full", "extra-traits", "printing", "clone-impls"]}

c2rust-ast-builder/src/builder.rs

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use proc_macro2::{Literal, Punct, Spacing, Span, TokenStream, TokenTree};
66
use std::default::Default;
77
use std::iter::FromIterator;
88
use syn::{__private::ToTokens, punctuated::Punctuated, *};
9+
use itertools::intersperse;
910

1011
pub mod properties {
1112
use proc_macro2::Span;
@@ -160,22 +161,14 @@ fn punct<T, P: Default>(x: Vec<T>) -> Punctuated<T, P> {
160161
fn punct_box<T, P: Default>(x: Vec<Box<T>>) -> Punctuated<T, P> {
161162
Punctuated::from_iter(x.into_iter().map(|x| *x))
162163
}
163-
164-
fn comma_separated<T, F>(items: Vec<T>, f: F) -> TokenStream
164+
fn comma_separated<I, T>(items: I) -> TokenStream
165165
where
166-
F: Fn(&mut TokenStream, T),
166+
I: Iterator<Item = T>,
167+
T: ToTokens + Clone,
167168
{
168-
let mut tokens = TokenStream::new();
169-
let mut first = true;
170-
for item in items {
171-
if !first {
172-
TokenTree::Punct(Punct::new(',', Spacing::Alone)).to_tokens(&mut tokens);
173-
} else {
174-
first = false;
175-
}
176-
f(&mut tokens, item);
177-
}
178-
tokens
169+
let items = items.map(|items| items.to_token_stream());
170+
let comma = TokenTree::Punct(Punct::new(',', Spacing::Alone)).into_token_stream();
171+
intersperse(items, comma).collect()
179172
}
180173

181174
pub trait Make<T> {
@@ -286,30 +279,21 @@ impl Make<TokenStream> for Vec<TokenTree> {
286279

287280
impl Make<TokenStream> for Vec<&str> {
288281
fn make(self, _mk: &Builder) -> TokenStream {
289-
comma_separated(self, |tokens, s| {
290-
let tt = TokenTree::Ident(Ident::new(s, Span::call_site()));
291-
tt.to_tokens(tokens);
292-
})
282+
comma_separated(self.iter().map(|&s| Ident::new(s, Span::call_site())))
293283
}
294284
}
295285

296286
impl Make<TokenStream> for Vec<u64> {
297287
fn make(self, _mk: &Builder) -> TokenStream {
298-
comma_separated(self, |tokens, s| {
299-
let tt = TokenTree::Literal(Literal::u64_unsuffixed(s));
300-
tt.to_tokens(tokens);
301-
})
288+
comma_separated(self.iter().map(|&s| Literal::u64_unsuffixed(s)))
302289
}
303290
}
304291

305292
impl Make<TokenStream> for Vec<Meta> {
306293
fn make(self, _mk: &Builder) -> TokenStream {
307-
comma_separated(self, |tokens, s| {
308-
s.to_tokens(tokens);
309-
})
294+
comma_separated(self.iter())
310295
}
311296
}
312-
313297
impl Make<PathArguments> for AngleBracketedGenericArguments {
314298
fn make(self, _mk: &Builder) -> PathArguments {
315299
PathArguments::AngleBracketed(self)

0 commit comments

Comments
 (0)