G.OTH.01 对于某些场景下不建议使用的方法可以通过配置 clippy.toml 来拒绝

【级别】 建议

【描述】

有些场合可能需要拒绝使用一些容易出错的方法或函数,可以在 clippy.toml 中通过配置 disallowed_method 来满足这个需求。

# clippy.toml
disallowed-methods = [
    # Can use a string as the path of the disallowed method.
    "std::boxed::Box::new",
    # Can also use an inline table with a `path` key.
    { path = "std::time::Instant::now" },
    # When using an inline table, can add a `reason` for why the method
    # is disallowed.
    { path = "std::vec::Vec::leak", reason = "no leaking memory" },
]

# 允许 Lint 支持配置值对应的本地语言
# 配置时候从该列表获取别名 https://www.unicode.org/iso15924/iso15924-codes.html
allowed-locales = ["Latin", "Cyrillic"] 

【反例】

clippy.toml 做了上面配置时,下面代码会曝出警告。


#![allow(unused)]
#![warn(clippy::disallowed_method, clippy::disallowed_script_idents, clippy::disallowed_type)]
fn main() {
// 不符合
let xs = vec![1, 2, 3, 4];
xs.leak(); // Vec::leak 被配置为不允许
let _now = Instant::now(); // Instant::now 被配置为不允许

let _box = Box::new(3); // Box::new 被配置为不允许
}

【正例】


#![allow(unused)]
#![warn(clippy::disallowed_method, clippy::disallowed_script_idents, clippy::disallowed_type)]

fn main() {
// 符合
let mut xs = Vec::new(); // Vec::new is _not_ disallowed in the
}

【Lint 检测】

lint nameClippy 可检测Rustc 可检测Lint Grouplevel
disallowed_methodyesnonurseryallow
disallowed_script_identsyesnorestrictionallow
disallowed_typeyesnonurseryallow

这些 lint 作用相似,但注意 nursery 的lint 还未稳定。