gpt4 book ai didi

rust - 解析rust proc_macro中括号内容

转载 作者:行者123 更新时间:2023-12-03 11:26:32 30 4
gpt4 key购买 nike

我正在使用 syn 在 Rust 中构建一个小型 HTML 解析器和 proc_macro2 .到目前为止,我已经可以解析常规的 HTML 标签及其属性例如

html!(
<div>
<image></image>
</div>
)

作品

但我想解析一些 JSX还有样式代码,所以像这样

html!(
<div>
{
(0..3).map(|| html!(<text value="new"></text>))
}
</div>
)

这是我的问题,我不知道如何解析我的 macro_code 中括号之间的代码,我想得到 Vector只有 <text></text>元素。

这是一个 Playground 示例

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d0a899ee52772565d4043fea24d8f21d

最佳答案

我终于找到了我的问题的答案,并决定分享它给其他也在努力解决这个问题的人。

如果您了解表达式在宏中的含义,这将非常容易。{} 之间的整个代码是一个 expression 并且在返回宏结果时,您可以将其用作 token 中的值。

小例子

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 )
}
});
}

关于rust - 解析rust proc_macro中括号内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63087084/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com