![](/img/trans.png)
[英]How to parse other attributes in custom rust proc_macro attribute?
[英]Parsing content of brackets in rust proc_macro
我正在使用syn
和proc_macro2
在 Rust 中构建一个小型 HTML 解析器。 到目前为止,我已经可以解析常规的 HTML 标签及其属性 例如
html!(
<div>
<image></image>
</div>
)
作品
但我也想解析一些JSX
风格的代码,所以像这样
html!(
<div>
{
(0..3).map(|| html!(<text value="new"></text>))
}
</div>
)
这是我的问题,我不知道如何解析宏代码中括号之间的代码,我想只使用<text></text>
元素来获取Vector
。
这是一个游乐场示例
我终于找到了我的问题的答案,并决定分享给其他正在努力解决问题的人。
如果您了解表达式在宏中的含义的概念,那将非常容易。 {}
之间的整个代码是一个expression
,当返回宏结果时,您可以将其用作标记内的值。
小例子
impl ToTokens for Response {
fn to_tokens(&self, tokens: &mut TokenStream) {
let expressions: Vec<Expr> = self.expressions.clone();
let entries: Vec<u16> = self.values.clone();
//We can now use our saved numbers and expressions in this quote! and return something totally new to the user.
tokens.extend(quote! {
{
let mut data: Vec<u16> = vec!(#(#entries),*);
let expressions: Vec<Vec<u16>> = vec!(#(#expressions),*);
for expr in expressions {
data.extend(expr);
};
data.iter().fold(0, |acc, len| acc + len )
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.