Hen*_*all 3 rust rust-macros rust-proc-macros
在过程宏中,我希望能够检查字符串是否是有效的变量名而不是关键字。
proc_macro2::Ident如果尝试使用无效的变量名将使用户感到恐慌,但是它将允许我不想使用的关键字。在惊慌之前用一个很好的和有用的错误消息来处理错误也将更好。
是否有一些宏或函数(位于板条箱中或其他方式)将检查字符串是否遵守有关变量名的规则?我可能可以使用正则表达式来做到这一点,但是龙却生活在正则表达式中。
这种情况的用例是处理用户输入字符串,其中可能包括垃圾字符串。
您可以Ident::parse从syn板条箱中使用。如果输入是关键字,它将失败:
use syn::{Ident, parse::Parse as _};
let ident = parse_stream.call(Ident::parse)?;
Run Code Online (Sandbox Code Playgroud)
从文档中:
Ident::new允许使用构造的标识符作为Rust关键字,尽管通过其Parse实现解析一个标识符会拒绝Rust关键字。