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); } } }