4个稳定版本
3.0.4 | 2023年8月26日 |
---|---|
2.0.3 | 2020年11月9日 |
1.0.3 | 2020年11月9日 |
1.0.2 | 2020年11月8日 |
1.0.0 |
|
#122 在 过程宏 中
每月27次 下载
在 5 个crate中(3 个直接) 使用
14KB
69 行
call2-for-syn
此库提供了一个位于 syn
的 parse2
和 ParseBuffer::call
之间的 call2
函数:它允许您方便地将解析函数应用于 proc-macro2
令牌流,例如从 quote!
。
安装
请使用 cargo-edit 总是添加此库的最新版本
cargo add call2-for-syn
示例
use call2_for_syn::{call2_allow_incomplete, call2_strict};
use quote::quote;
use syn::{ext::IdentExt as _, Ident, Token};
use unquote::unquote;
let (now, is) = call2_strict(
quote!(Now is...),
|input| {
let now: Ident = input.parse()?;
let is: Ident = input.parse()?;
// input.parse::<Token![!]>()?;
syn::Result::Ok((now, is))
},
).unwrap_err().parsed.unwrap(); // Use ? here in a real program.
assert_eq!(format!("{}", now), "Now");
assert_eq!(format!("{}", is), "is");
let (a, good, time) = call2_strict(
quote!(...a good time...),
|input| {
let a: Ident;
let good: Ident;
let time: Ident;
unquote!(input, ... #a #good #time ...);
syn::Result::Ok((a, good, time))
},
).unwrap().unwrap(); // Use ? here in a real program.
assert_eq!(format!("{}", a), "a");
assert_eq!(format!("{}", good), "good");
assert_eq!(format!("{}", time), "time");
let (r#for, parsing) = call2_allow_incomplete(
quote!(for parsing!),
|input| {
let r#for = input.call(Ident::parse_any)?;
let parsing: Ident = input.parse()?;
// input.parse::<Token![!]>()?;
syn::Result::Ok((r#for, parsing))
},
).unwrap(); // Use ? here in a real program.
assert_eq!(format!("{}", r#for), "for");
assert_eq!(format!("{}", parsing), "parsing");
许可协议
许可协议为以下之一
- Apache License 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据Apache-2.0许可证的定义,应按上述方式双重许可,无需任何附加条款或条件。
有关更多信息,请参阅 CONTRIBUTING。
行为准则
变更日志
版本控制
call2-for-syn
严格遵循 语义版本控制 2.0.0,但有以下例外
- 在主版本更改时,次要版本不会重置为 0(除 v1 之外)。
将其视为全局功能级别。 - 在主版本或次要版本更改时,补丁版本不会重置为 0(除 v0.1 和 v1 之外)。
将其视为全局补丁级别。
这包括上述指定的Rust版本要求。
早期Rust版本可能兼容,但此兼容性可能会随着次要或补丁版本的发布而改变。
受功能和补丁影响的版本可以从 CHANGELOG.md 中的相应标题中确定。
请注意,本包的依赖可能具有更宽松的MSRV策略!如果您不手动生成Cargo.lock(或必要时)且需要支持比当前稳定版更旧的编译器,请在自动化脚本中使用以下命令:cargo +nightly update -Z minimal-versions
。
依赖项
~270–700KB
~17K SLoC