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 2020年5月11日

#122过程宏

每月27次 下载
5 个crate中(3 个直接) 使用

MIT/Apache

14KB
69

call2-for-syn

Lib.rs Crates.io Docs.rs

Rust 1.54 CI Crates.io - License

GitHub open issues open pull requests good first issues

crev reviews Zulip Chat

此库提供了一个位于 synparse2ParseBuffer::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-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