#编译 #预防 #测试 #模式 #lets # #小写

todo

Minuscule TODO! 宏,允许您进行类型检查和测试,但在发布模式下防止编译

2 个不稳定版本

使用旧的 Rust 2015

0.3.0 2018 年 9 月 21 日
0.2.0 2018 年 9 月 21 日
0.1.0 2018 年 9 月 21 日

#1613Rust 模式

Apache-2.0

5KB

待办事项

用法

#[allow(unused)]
#[macro_use]
extern crate todo;

fn my_function() -> Result<(), String> {
    TODO!(
        "`my_function` should return something _really groundbreaking_";
        Ok(())
    )
}

fn main() {
    assert_eq!(my_function().unwrap(), ());
}

当与调试断言一起编译时,将使用 Ok(()) 模拟值,您的代码将进行类型检查并运行,而无需使用 unimplemented!()(尽管如果您不提供模拟值,它将回退到使用包含您的待办事项消息的 unimplemented!())。

但是,当您在发布模式下启用调试断言进行构建时,您将获得一个包含您的待办事项消息的编译时错误。

这有用吗?

曾经 是由工作中的特定情况所激发的,我们在一些结构体中引入了一个特质,然后为每个结构体实现该特质的工作进行了拆分。其中某个结构体的实现将调用另一个结构体的实现,但因为我们没有在另一个结构体上提供模拟特质实现,所以我们完全忘记了这件事,然后忘记了回到第一个结构体的实现。

这可能不是对这个的最佳推销,但我 认为可能 有所帮助。

这真的是一件小事吗?

是的

可能太小,无法作为 crate 依赖项而引人注目?

可能。嗯。是的,您可能有一个观点。如果它太小,令人烦恼,不适合作为 crate,但您认为它可能对您正在做的事情有所帮助,您可以将宏声明直接复制粘贴到您的代码中(没有坏心情!)

#[cfg(not(debug_assertions))]
#[allow(unused)]
macro_rules! TODO {
    ($message:expr; $dummy:expr) => {
        compile_error!(concat!(
            "TODO: Must implement prior to release: ",
            $message
        ));
    };
    ($message:expr;) => {
        compile_error!(concat!(
            "TODO: Must implement prior to release: ",
            $message
        ));
    };
    ($message:expr) => {
        compile_error!(concat!(
            "TODO: Must implement prior to release: ",
            $message
        ));
    };
}

#[cfg(debug_assertions)]
#[allow(unused)]
macro_rules! TODO {
    ($message:expr; $dummy:expr) => {{
        $dummy
    }};
    ($message:expr;) => {{
        unimplemented!($message)
    }};
    ($message:expr) => {{
        unimplemented!($message)
    }};
}

无运行时依赖