作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我认为过程宏只需要具有词法上有效的输入,但似乎所有输入也必须解析为 Rust 代码,除非我做错了什么。
RFC 说:
By operating on tokens, code passed to procedural macros does not need to satisfy the Rust parser, only the lexer.
#[proc_macro_attribute]
pub fn my_macro(_: TokenStream, _: TokenStream) -> TokenStream {
TokenStream::from(quote! {})
}
运行时:
#[my_macro]
fn test() { * } // lexically valid but syntactically invalid
我收到错误:
error: expected expression, found `}`
--> blah.rs:38:2
|
33 | #[logic] fn omg () { * }
| ^ expected expression
cargo-expand
表明宏正确删除了该函数。难道它不应该停止任何解析错误吗?
最佳答案
通过仔细阅读 proc-macro RFC,我注意到这是类似属性的 proc-macros 的记录行为:
The second argument is the tokens for the AST node the attribute is placed on. Note that in order to compute the tokens to pass here, the compiler must be able to parse the code the attribute is applied to.
关于rust - 如何在程序宏中接受语法上无效的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68550037/
我是一名优秀的程序员,十分优秀!