Crate 作者的属性

在某些情况下,可以将 Clippy 的覆盖范围扩展到第三方库。为此,Clippy 提供了可以应用于第三方 crate 中项目的属性。

#[clippy::format_args]

自 Clippy v1.84 版本起可用

此属性可以添加到支持 format!println! 或类似语法的宏。它告诉 Clippy 该宏是一个格式化宏,并且该宏的参数应该像 format! 的参数一样进行 lint 检查。任何适用于 format! 调用的 lint 也将适用于宏调用。该宏在格式字符串之前可能有额外的参数,这些参数将被忽略。

示例

#![allow(unused)]
fn main() {
/// A macro that prints a message if a condition is true.
#[macro_export]
#[clippy::format_args]
macro_rules! print_if {
    ($condition:expr, $($args:tt)+) => {{
        if $condition {
            println!($($args)+)
        }
    }};
}
}

#[clippy::has_significant_drop]

自 Clippy v1.60 版本起可用

clippy::has_significant_drop 属性可以添加到其 Drop impl 具有重要副作用的类型,例如解锁互斥锁,这使得用户能够准确理解它们的生命周期变得很重要。当在 match scrutinee 的函数调用中返回临时变量时,它的生命周期会持续到 match 代码块的末尾,这可能会令人惊讶。

示例

#![allow(unused)]
fn main() {
#[clippy::has_significant_drop]
struct CounterWrapper<'a> {
    counter: &'a Counter,
}

impl<'a> Drop for CounterWrapper<'a> {
    fn drop(&mut self) {
        self.counter.i.fetch_sub(1, Ordering::Relaxed);
    }
}
}