doc_chunks/
testcase.rs

1use crate::{Span, TrimmedLiteral};
2
3pub fn annotated_literals_raw(source: &str) -> impl Iterator<Item = proc_macro2::Literal> + '_ {
4    let stream = syn::parse_str::<proc_macro2::TokenStream>(source).expect("Must be valid rust");
5    stream
6        .into_iter()
7        .filter_map(|x| {
8            if let proc_macro2::TokenTree::Group(group) = x {
9                Some(group.stream().into_iter())
10            } else {
11                None
12            }
13        })
14        .flatten()
15        .filter_map(|x| {
16            if let proc_macro2::TokenTree::Literal(literal) = x {
17                Some(literal)
18            } else {
19                None
20            }
21        })
22}
23
24pub fn annotated_literals(source: &str) -> Vec<TrimmedLiteral> {
25    annotated_literals_raw(source)
26        .map(|literal| {
27            let span = Span::from(literal.span());
28            TrimmedLiteral::load_from(source, span)
29                .expect("Literals must be convertable to trimmed literals")
30        })
31        .collect()
32}