【发布时间】:2020-12-27 03:17:23
【问题描述】:
我有这样的返回语句的宏:
macro_rules! return_fail {
( $res:expr ) => {
match $res {
Ok(val) => val,
Err(e) => {
eprintln!(
"An error: on {}:{} {}; aborting current function.",
file!(),
line!(),
e
);
return;
}
}
};
}
fn bad(flag: bool) -> Result<(), String> {
if flag {
Ok(())
} else {
Err("u r idiot".to_string())
}
}
fn main() {
return_fail!(bad(true));
return_fail!(bad(false));
}
当我在函数中间使用这个宏时,它可以正常工作,但是当我在函数末尾使用它时,我会收到来自 Clippy 的警告:
warning: unneeded `return` statement
--> src/main.rs:12:17
|
12 | return;
| ^^^^^^^ help: remove `return`
...
28 | return_fail!(bad(false));
| ------------------------- in this macro invocation
|
= note: `#[warn(clippy::needless_return)]` on by default
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return
= note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
如何抑制此警告?我尝试在宏定义的上一行添加#[allow(clippy::needless_return)],但没有成功。
【问题讨论】:
-
这很可能是clippy中的一个错误,因为它应该知道代码来自宏并禁用某些lints。
-
你试过
#![allow(clippy::needless_return)] -
@cperez08 将在任何地方禁用它,而不仅仅是一个位置。似乎太过分了。
-
该游乐场示例不再发生这种情况。似乎现在在那里运行的 clippy 版本不介意宏中的
return。
标签: rust compiler-warnings rust-clippy