Clippy сообщает «слишком много аргументов` статическому объявлению

#rust #rust-clippy

#Ржавчина #rust-clippy

Вопрос:

Этот код взят из моей ОС.

 #[global_allocator]
pub static ALLOCATOR: LockedHeap = LockedHeap::empty();
  

Clippy говорит, что у этой функции слишком много аргументов.

 error: this function has too many arguments (4/3)
  --> src/mem/allocator/heap.rs:14:1
   |
14 | pub static ALLOCATOR: LockedHeap = LockedHeap::empty();
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
note: the lint level is defined here
  --> src/lib.rs:14:9
   |
14 | #![deny(clippy::all)]
   |         ^^^^^^^^^^^
   = note: `#[deny(clippy::too_many_arguments)]` implied by `#[deny(clippy::all)]`
   = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments
   = note: this error originates in an attribute macro (in Nightly builds, run with -Z macro-backtrace for more info)
  

Я думал, что причиной является global_allocator атрибут или linked_list_allocator ящик, поэтому я написал минимальный код, используя их.

 #![deny(clippy::all)]
#![feature(alloc_error_handler)]
#![feature(start)]
#![feature(lang_items)]
#![no_std]

#[global_allocator]
pub static LIST: linked_list_allocator::LockedHeap = linked_list_allocator::LockedHeap::empty();

#[start]
fn _start(c: isize, v: *const *const u8) -> isize {
    3
}

#[alloc_error_handler]
fn oom(_layout: core::alloc::Layout) -> ! {
    panic!()
}

#[panic_handler]
fn panic(_info: amp;core::panic::PanicInfo) -> ! {
    loop {}
}

#[lang = "eh_personality"]
fn eh() {}
  

Однако clippy ничего не сказал об этом коде.

Почему clippy жалуется на первый код?

Комментарии:

1. Не могли бы вы попробовать сокращать все больше и больше своего кода, пока не создадите минимальный пример, который по-прежнему показывает неправильный ворс? Это, вероятно, будет интересно разработчикам clippy.

2. clippy не является идеальным инструментом

3. Может быть еще один случай ложных срабатываний при выборе (… распределителя . В любом случае, какой-либо канал clippy, вероятно, был бы лучшим местом для такого рода запросов, я не знаю, есть ли в сообществе clippy разногласия или дискурс.

4. @user4815162342 Спасибо за ваш комментарий, но я совершенно потерян. Clippy внезапно замолкает после перемещения каталога, то есть Clippy жалуется, если я запускаю его в ~/Downloads/foo , но после запуска cp ~/Downloads/foo ~ -r amp;amp; cd ~/foo amp;amp; cargo clean amp;amp; cargo clippy ошибок не было напечатано. Я видел странное поведение другого clippy. Я не могу в ближайшее время создать воспроизводимый минимальный код.

5. @Masklinn Проблема, похоже, связана, спасибо.

Ответ №1:

Если clippy жалуется на это при обычном объявлении функции, используйте #[allow(clippy::too_many_arguments)] атрибут указанной функции, чтобы избавиться от ошибки.