1个不稳定版本
0.1.0 | 2020年11月19日 |
---|
#1682 在 进程宏
26KB
560 行
token_stream_flatten-rs
为Rust的token流提供扁平化迭代适配器。允许将Rust源代码处理为一系列基本token。
请参阅文档以获取详细信息。
许可协议
lib.rs
:
为token流提供扁平化迭代适配器。
允许将Rust源代码处理为一系列基本token。
使用方法
可以通过flatten_rec
方法获得适配器FlattenRec
,该方法由proc-macro2
's IntoIter
实现的IntoFlattenRec
特性提供。这对于方法链式调用很方便。
或者,可以直接使用FlattenRec
's From<IntoIter>
实现。
#
let stream = r#"if n > 1 { foo[n - 2] } else { 11 }"#
.parse::<proc_macro2::TokenStream>()
.unwrap();
let flat = stream.into_iter().flatten_rec().collect::<Vec<_>>();
assert_eq!(
flat.iter().map(|token| token.to_string()).collect::<Vec<_>>(),
vec!["if", "n", ">", "1", "{", "foo", "[", "n", "-", "2", "]", "}", "else", "{", "11", "}"],
);
assert_eq!(flat[2].span().start(), proc_macro2::LineColumn { line: 1, column: 5 });
assert_eq!(flat[2].span().end(), proc_macro2::LineColumn { line: 1, column: 6 });
if let Token::Punct(punct) = &flat[2] {
assert_eq!(punct.as_char(), '>');
} else {
panic!("expected punct");
}
assert_eq!(flat[10].span().start(), proc_macro2::LineColumn { line: 1, column: 20 });
assert_eq!(flat[10].span().end(), proc_macro2::LineColumn { line: 1, column: 21 });
if let Token::Delimiter(delimiter) = &flat[10] {
assert_eq!(delimiter.kind(), DelimiterKind::Bracket);
assert_eq!(delimiter.position(), DelimiterPosition::Close);
} else {
panic!("expected delimiter");
}
功能
proc-macro
: 启用proc-macro2
的proc-macro
功能(默认启用)。span-locations
: 启用proc-macro2
的span-locations
功能(默认启用)。
a bc
依赖
~60KB