#proc-macro #convert #expression #let #procedural #panic #refutable

irrefutable

过程宏,将可反驳的let表达式转换为不可反驳的

4个版本

0.1.3 2020年6月8日
0.1.2 2020年4月23日
0.1.1 2020年4月17日
0.1.0 2020年4月16日

#1705 in 过程宏

MIT/Apache

9KB
183

不可反驳

Build Status Build Status Crates Docs License

过程宏,将可反驳的let表达式转换为不可反驳的。

示例

panic

#![feature(proc_macro_hygiene)]

use irrefutable::irrefutable;

#[irrefutable(panic("The cause."))]
let Some((a, b)) = Some(("a", "b"));

展开为

let (a, b) = if let Some((a, b)) = Some(("a", "b")) {
    (a, b)
} else {
    panic!("The cause.");
};

return

#![feature(proc_macro_hygiene)]

use irrefutable::irrefutable;

#[irrefutable(return)]
let Some((a, b)) = Some(("a", "b"));

展开为

let (a, b) = if let Some((a, b)) = Some(("a", "b")) {
    (a, b)
} else {
    return;
};

unreachable

#![feature(proc_macro_hygiene)]

use irrefutable::irrefutable;

#[irrefutable(unreachable)]
let Some((a, b)) = Some(("a", "b"));

展开为

let (a, b) = if let Some((a, b)) = Some(("a", "b")) {
    (a, b)
} else {
    unreachable!();
};

依赖

~1.5MB
~35K SLoC