Clippy, отключить некоторые правила для некоторых файлов

Коллеги, привет.

У меня есть кусок кода, в данном случае такой:

                let mv = if r < 4 {
                    select_move(r)
                } else if r < 4 + ri.abs() {
                    // vertical move
                    if ri < 0 { Move::Up } else { Move::Down }
                } else {
                    // horizontal move
                    if rj < 0 { Move::Left } else { Move::Right }
                };

Cippy говорит, что это отстой, и можно последний else скукожить так:

                let mv = if r < 4 {
                    select_move(r)
                } else if r < 4 + ri.abs() {
                    // vertical move
                    if ri < 0 { Move::Up } else { Move::Down }
                } else if rj < 0 { Move::Left } else { Move::Right }; // horizontal move

Вообще говоря он даёт неплохой совет, но в данном случае я бы оставил как есть, потому что я хочу явно выделить кейсы.

Возможно ли отключить предупреждение конкретно для этого участка кода? Для файла? Если да, что нужно в clippy.toml написать?

#[cfg_attr(feature = "cargo-clippy", allow(needless_lifetimes))] добавь для блока. Только с нужным предупреждением, конечно :slight_smile:

1 лайк

Спасибо, Андрей!

ps: Интересно, как это можно было узнать? Я наверное как-то неправильно читаю документацию (https://github.com/rust-lang-nursery/rust-clippy#configuration), там есть твоя строка, но непонятно было как же её использовать и куда вставлять… Направлю я им наверное PR с примером использования в доке.

Я находил на гитхабе проекты с прописанными в lib.rs директивами:

#![cfg_attr(feature="clippy", feature(plugin))]
#![cfg_attr(feature="clippy", plugin(clippy))]
#![cfg_attr(feature="clippy", allow(collapsible_if,
                                    needless_return,
                                    needless_range_loop,
                                    or_fun_call))]

#[macro_use]

и разумеется сделал так же (без видимого эффекта).

feature="clippy" - я так понимаю, оно активируется когда ты clippy используешь по старому, а не через cargo-clippy.

PR с более ясным примером - отличная идея, если считаешь что https://github.com/rust-lang-nursery/rust-clippy#allowingdenying-lints мало.