如何抑制源自宏的 Clippy 警告?

Posted

技术标签:

【中文标题】如何抑制源自宏的 Clippy 警告?【英文标题】:How can I suppress a Clippy warning originating from a macro? 【发布时间】: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));

Rust playground

当我在函数中间使用这个宏时,它可以正常工作,但是当我在函数末尾使用它时,我会收到来自 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 【参考方案1】:

如果你扩展宏,最后一个 return 语句就没有必要了。

【讨论】:

以上是关于如何抑制源自宏的 Clippy 警告?的主要内容,如果未能解决你的问题,请参考以下文章

如何抑制 LLVM 自动合成警告?

如何在 Kotlin 中抑制检查式警告

如何抑制龙目岛警告

如何抑制蜂巢警告

如何抑制更新链接警告?

如何使用 Intellij SonarLint 插件抑制特定方法的警告