在过程宏中,如何检查字符串是否是有效的变量名而不是关键字?
In a procedural macro, how can I check if a string is a valid variable name and not a keyword?
在程序宏中,我希望能够检查字符串是否是有效的变量名而不是关键字。
proc_macro2::Ident
如果有人试图使用无效的变量名,将会出现恐慌,但它会允许我不想被允许的关键字。在恐慌之前用一个好的和有用的错误消息来处理错误也会更好。
是否有一些宏或函数(在板条箱中或其他地方)会检查字符串是否遵守 rules about variable names?我可能可以用正则表达式来做到这一点,但龙生活在正则表达式中。
此用例是处理用户输入字符串,其中可能包含垃圾字符串。
您可以使用 syn
crate 中的 Ident::parse
。如果输入是关键字,它将失败:
use syn::{Ident, parse::Parse as _};
let ident = parse_stream.call(Ident::parse)?;
An identifier constructed with Ident::new
is permitted to be a Rust keyword, though parsing one through its Parse
implementation rejects Rust keywords.
在程序宏中,我希望能够检查字符串是否是有效的变量名而不是关键字。
proc_macro2::Ident
如果有人试图使用无效的变量名,将会出现恐慌,但它会允许我不想被允许的关键字。在恐慌之前用一个好的和有用的错误消息来处理错误也会更好。
是否有一些宏或函数(在板条箱中或其他地方)会检查字符串是否遵守 rules about variable names?我可能可以用正则表达式来做到这一点,但龙生活在正则表达式中。
此用例是处理用户输入字符串,其中可能包含垃圾字符串。
您可以使用 syn
crate 中的 Ident::parse
。如果输入是关键字,它将失败:
use syn::{Ident, parse::Parse as _};
let ident = parse_stream.call(Ident::parse)?;
An identifier constructed with
Ident::new
is permitted to be a Rust keyword, though parsing one through itsParse
implementation rejects Rust keywords.