3

在过程宏中,我希望能够检查字符串是有效的变量名而不是关键字。

proc_macro2::Ident如果尝试使用无效的变量名会惊慌,但它会允许我不想被允许的关键字。在恐慌之前使用漂亮且有用的错误消息来处理错误也会更好。

是否有一些宏或函数(在板条箱中或其他地方)会检查字符串是否符合关于变量名的规则?我可能可以用正则表达式来做到这一点,但龙生活在正则表达式中。

用例是处理用户输入字符串,其中可能包括垃圾字符串。

4

1 回答 1

6

您可以Ident::parsesyn板条箱中使用。如果输入是关键字,它将失败:

use syn::{Ident, parse::Parse as _};

let ident = parse_stream.call(Ident::parse)?;

文档中:

构造的标识符Ident::new允许作为 Rust 关键字,尽管通过其Parse实现解析一个标识符会拒绝 Rust 关键字。

于 2019-11-19T15:44:27.010 回答