-#![feature(tool_lints)]
-
#![warn(clippy::needless_pass_by_value)]
-#![allow(dead_code, clippy::single_match, clippy::if_let_redundant_pattern_matching, clippy::many_single_char_names, clippy::option_option)]
+#![allow(dead_code)]
+#![allow(
+ clippy::option_option,
+ clippy::redundant_clone,
+ clippy::redundant_pattern_matching,
+ clippy::single_match,
+ clippy::uninlined_format_args
+)]
use std::borrow::Borrow;
+use std::collections::HashSet;
use std::convert::AsRef;
+use std::mem::MaybeUninit;
// `v` should be warned
// `w`, `x` and `y` are allowed (moved or mutated)
impl<T: Serialize, U> S<T, U> {
fn foo(
- self, // taking `self` by value is always allowed
+ self,
+ // taking `self` by value is always allowed
s: String,
t: String,
) -> usize {
s.len() + t.capacity()
}
- fn bar(
- _t: T, // Ok, since `&T: Serialize` too
+ fn bar(_t: T, // Ok, since `&T: Serialize` too
) {
}
- fn baz(
- &self,
- _u: U,
- _s: Self,
- ) {
- }
+ fn baz(&self, _u: U, _s: Self) {}
}
trait FalsePositive {
}
// shouldn't warn on extern funcs
-extern "C" fn ext(x: String) -> usize { x.len() }
+extern "C" fn ext(x: MaybeUninit<usize>) -> usize {
+ unsafe { x.assume_init() }
+}
-// whitelist RangeArgument
+// exempt RangeArgument
fn range<T: ::std::ops::RangeBounds<usize>>(range: T) {
let _ = range.start_bound();
}
impl<T> Club<'static, T> for T {}
fn more_fun(_item: impl Club<'static, i32>) {}
-fn main() {}
+fn is_sync<T>(_: T)
+where
+ T: Sync,
+{
+}
+
+fn main() {
+ // This should not cause an ICE either
+ // https://github.com/rust-lang/rust-clippy/issues/3144
+ is_sync(HashSet::<usize>::new());
+}