Merge commit 'b794b8e08c' into clippy-subtree-update
This commit is contained in:
commit
2ed6ed41be
191 changed files with 4157 additions and 2504 deletions
|
|
@ -1,22 +1,18 @@
|
|||
error: use of a disallowed method `rustc_lint::context::LintContext::span_lint`
|
||||
--> tests/ui-internal/disallow_span_lint.rs:14:5
|
||||
--> tests/ui-internal/disallow_span_lint.rs:14:8
|
||||
|
|
||||
LL | / cx.span_lint(lint, span, |lint| {
|
||||
LL | | lint.primary_message(msg);
|
||||
LL | | });
|
||||
| |______^
|
||||
LL | cx.span_lint(lint, span, |lint| {
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: this function does not add a link to our documentation, please use the `clippy_utils::diagnostics::span_lint*` functions instead (from clippy.toml)
|
||||
= note: `-D clippy::disallowed-methods` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::disallowed_methods)]`
|
||||
|
||||
error: use of a disallowed method `rustc_middle::ty::context::TyCtxt::node_span_lint`
|
||||
--> tests/ui-internal/disallow_span_lint.rs:20:5
|
||||
--> tests/ui-internal/disallow_span_lint.rs:20:9
|
||||
|
|
||||
LL | / tcx.node_span_lint(lint, hir_id, span, |lint| {
|
||||
LL | | lint.primary_message(msg);
|
||||
LL | | });
|
||||
| |______^
|
||||
LL | tcx.node_span_lint(lint, hir_id, span, |lint| {
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: this function does not add a link to our documentation, please use the `clippy_utils::diagnostics::span_lint_hir*` functions instead (from clippy.toml)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
error: `std::string::String` may not be held across an `await` point per `clippy.toml`
|
||||
error: `std::string::String` may not be held across an await point per `clippy.toml`
|
||||
--> tests/ui-toml/await_holding_invalid_type/await_holding_invalid_type.rs:5:9
|
||||
|
|
||||
LL | let _x = String::from("hello");
|
||||
|
|
@ -8,13 +8,13 @@ LL | let _x = String::from("hello");
|
|||
= note: `-D clippy::await-holding-invalid-type` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::await_holding_invalid_type)]`
|
||||
|
||||
error: `std::net::Ipv4Addr` may not be held across an `await` point per `clippy.toml`
|
||||
error: `std::net::Ipv4Addr` may not be held across an await point per `clippy.toml`
|
||||
--> tests/ui-toml/await_holding_invalid_type/await_holding_invalid_type.rs:10:9
|
||||
|
|
||||
LL | let x = Ipv4Addr::new(127, 0, 0, 1);
|
||||
| ^
|
||||
|
||||
error: `std::string::String` may not be held across an `await` point per `clippy.toml`
|
||||
error: `std::string::String` may not be held across an await point per `clippy.toml`
|
||||
--> tests/ui-toml/await_holding_invalid_type/await_holding_invalid_type.rs:33:13
|
||||
|
|
||||
LL | let _x = String::from("hi!");
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
avoid-breaking-exported-api = false
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#![warn(clippy::needless_pass_by_ref_mut)]
|
||||
#![allow(clippy::ptr_arg)]
|
||||
|
||||
// Should warn
|
||||
pub fn pub_foo(s: &Vec<u32>, b: &u32, x: &mut u32) {
|
||||
//~^ ERROR: this argument is a mutable reference, but not used mutably
|
||||
*x += *b + s.len() as u32;
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#![warn(clippy::needless_pass_by_ref_mut)]
|
||||
#![allow(clippy::ptr_arg)]
|
||||
|
||||
// Should warn
|
||||
pub fn pub_foo(s: &mut Vec<u32>, b: &u32, x: &mut u32) {
|
||||
//~^ ERROR: this argument is a mutable reference, but not used mutably
|
||||
*x += *b + s.len() as u32;
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui-toml/needless_pass_by_ref_mut/needless_pass_by_ref_mut.rs:5:19
|
||||
|
|
||||
LL | pub fn pub_foo(s: &mut Vec<u32>, b: &u32, x: &mut u32) {
|
||||
| ^^^^^^^^^^^^^ help: consider changing to: `&Vec<u32>`
|
||||
|
|
||||
= warning: changing this function will impact semver compatibility
|
||||
= note: `-D clippy::needless-pass-by-ref-mut` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::needless_pass_by_ref_mut)]`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
@ -2,36 +2,36 @@ error: use of a disallowed method `regex::Regex::new`
|
|||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:35:14
|
||||
|
|
||||
LL | let re = Regex::new(r"ab.*c").unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= note: `-D clippy::disallowed-methods` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::disallowed_methods)]`
|
||||
|
||||
error: use of a disallowed method `regex::Regex::is_match`
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:36:5
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:36:8
|
||||
|
|
||||
LL | re.is_match("abc");
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
| ^^^^^^^^
|
||||
|
|
||||
= note: no matching allowed (from clippy.toml)
|
||||
|
||||
error: use of a disallowed method `std::iter::Iterator::sum`
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:39:5
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:39:14
|
||||
|
|
||||
LL | a.iter().sum::<i32>();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
| ^^^
|
||||
|
||||
error: use of a disallowed method `slice::sort_unstable`
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:41:5
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:41:7
|
||||
|
|
||||
LL | a.sort_unstable();
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: use of a disallowed method `f32::clamp`
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:44:13
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:44:20
|
||||
|
|
||||
LL | let _ = 2.0f32.clamp(3.0f32, 4.0f32);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| ^^^^^
|
||||
|
||||
error: use of a disallowed method `regex::Regex::new`
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:47:61
|
||||
|
|
@ -55,37 +55,37 @@ error: use of a disallowed method `futures::stream::select_all`
|
|||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:54:31
|
||||
|
|
||||
LL | let same_name_as_module = select_all(vec![empty::<()>()]);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: use of a disallowed method `conf_disallowed_methods::local_fn`
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:56:5
|
||||
|
|
||||
LL | local_fn();
|
||||
| ^^^^^^^^^^
|
||||
| ^^^^^^^^
|
||||
|
||||
error: use of a disallowed method `conf_disallowed_methods::local_mod::f`
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:57:5
|
||||
|
|
||||
LL | local_mod::f();
|
||||
| ^^^^^^^^^^^^^^
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: use of a disallowed method `conf_disallowed_methods::Struct::method`
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:59:5
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:59:7
|
||||
|
|
||||
LL | s.method();
|
||||
| ^^^^^^^^^^
|
||||
| ^^^^^^
|
||||
|
||||
error: use of a disallowed method `conf_disallowed_methods::Trait::provided_method`
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:60:5
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:60:7
|
||||
|
|
||||
LL | s.provided_method();
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
||||
error: use of a disallowed method `conf_disallowed_methods::Trait::implemented_method`
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:61:5
|
||||
--> tests/ui-toml/toml_disallowed_methods/conf_disallowed_methods.rs:61:7
|
||||
|
|
||||
LL | s.implemented_method();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 14 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#![allow(non_fmt_panics, clippy::needless_bool)]
|
||||
#![allow(non_fmt_panics, clippy::needless_bool, clippy::eq_op)]
|
||||
|
||||
macro_rules! assert_const {
|
||||
($len:expr) => {
|
||||
|
|
@ -49,7 +49,16 @@ fn main() {
|
|||
const _: () = assert!(true);
|
||||
//~^ ERROR: `assert!(true)` will be optimized out by the compiler
|
||||
|
||||
assert!(8 == (7 + 1));
|
||||
//~^ ERROR: `assert!(true)` will be optimized out by the compiler
|
||||
|
||||
// Don't lint if the value is dependent on a defined constant:
|
||||
const N: usize = 1024;
|
||||
const _: () = assert!(N.is_power_of_two());
|
||||
}
|
||||
|
||||
const _: () = {
|
||||
assert!(true);
|
||||
//~^ ERROR: `assert!(true)` will be optimized out by the compiler
|
||||
assert!(8 == (7 + 1));
|
||||
};
|
||||
|
|
|
|||
|
|
@ -80,5 +80,21 @@ LL | const _: () = assert!(true);
|
|||
|
|
||||
= help: remove it
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
error: `assert!(true)` will be optimized out by the compiler
|
||||
--> tests/ui/assertions_on_constants.rs:52:5
|
||||
|
|
||||
LL | assert!(8 == (7 + 1));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: remove it
|
||||
|
||||
error: `assert!(true)` will be optimized out by the compiler
|
||||
--> tests/ui/assertions_on_constants.rs:61:5
|
||||
|
|
||||
LL | assert!(true);
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= help: remove it
|
||||
|
||||
error: aborting due to 12 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ mod std_mutex {
|
|||
|
||||
pub async fn bad(x: &Mutex<u32>) -> u32 {
|
||||
let guard = x.lock().unwrap();
|
||||
//~^ ERROR: this `MutexGuard` is held across an `await` point
|
||||
//~^ ERROR: this `MutexGuard` is held across an await point
|
||||
baz().await
|
||||
}
|
||||
|
||||
|
|
@ -24,13 +24,13 @@ mod std_mutex {
|
|||
|
||||
pub async fn bad_rw(x: &RwLock<u32>) -> u32 {
|
||||
let guard = x.read().unwrap();
|
||||
//~^ ERROR: this `MutexGuard` is held across an `await` point
|
||||
//~^ ERROR: this `MutexGuard` is held across an await point
|
||||
baz().await
|
||||
}
|
||||
|
||||
pub async fn bad_rw_write(x: &RwLock<u32>) -> u32 {
|
||||
let mut guard = x.write().unwrap();
|
||||
//~^ ERROR: this `MutexGuard` is held across an `await` point
|
||||
//~^ ERROR: this `MutexGuard` is held across an await point
|
||||
baz().await
|
||||
}
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ mod std_mutex {
|
|||
let first = baz().await;
|
||||
|
||||
let guard = x.lock().unwrap();
|
||||
//~^ ERROR: this `MutexGuard` is held across an `await` point
|
||||
//~^ ERROR: this `MutexGuard` is held across an await point
|
||||
|
||||
let second = baz().await;
|
||||
|
||||
|
|
@ -66,7 +66,7 @@ mod std_mutex {
|
|||
|
||||
let second = {
|
||||
let guard = x.lock().unwrap();
|
||||
//~^ ERROR: this `MutexGuard` is held across an `await` point
|
||||
//~^ ERROR: this `MutexGuard` is held across an await point
|
||||
baz().await
|
||||
};
|
||||
|
||||
|
|
@ -79,7 +79,7 @@ mod std_mutex {
|
|||
pub fn block_bad(x: &Mutex<u32>) -> impl std::future::Future<Output = u32> + '_ {
|
||||
async move {
|
||||
let guard = x.lock().unwrap();
|
||||
//~^ ERROR: this `MutexGuard` is held across an `await` point
|
||||
//~^ ERROR: this `MutexGuard` is held across an await point
|
||||
baz().await
|
||||
}
|
||||
}
|
||||
|
|
@ -92,7 +92,7 @@ mod parking_lot_mutex {
|
|||
|
||||
pub async fn bad(x: &Mutex<u32>) -> u32 {
|
||||
let guard = x.lock();
|
||||
//~^ ERROR: this `MutexGuard` is held across an `await` point
|
||||
//~^ ERROR: this `MutexGuard` is held across an await point
|
||||
baz().await
|
||||
}
|
||||
|
||||
|
|
@ -108,13 +108,13 @@ mod parking_lot_mutex {
|
|||
|
||||
pub async fn bad_rw(x: &RwLock<u32>) -> u32 {
|
||||
let guard = x.read();
|
||||
//~^ ERROR: this `MutexGuard` is held across an `await` point
|
||||
//~^ ERROR: this `MutexGuard` is held across an await point
|
||||
baz().await
|
||||
}
|
||||
|
||||
pub async fn bad_rw_write(x: &RwLock<u32>) -> u32 {
|
||||
let mut guard = x.write();
|
||||
//~^ ERROR: this `MutexGuard` is held across an `await` point
|
||||
//~^ ERROR: this `MutexGuard` is held across an await point
|
||||
baz().await
|
||||
}
|
||||
|
||||
|
|
@ -136,7 +136,7 @@ mod parking_lot_mutex {
|
|||
let first = baz().await;
|
||||
|
||||
let guard = x.lock();
|
||||
//~^ ERROR: this `MutexGuard` is held across an `await` point
|
||||
//~^ ERROR: this `MutexGuard` is held across an await point
|
||||
|
||||
let second = baz().await;
|
||||
|
||||
|
|
@ -150,7 +150,7 @@ mod parking_lot_mutex {
|
|||
|
||||
let second = {
|
||||
let guard = x.lock();
|
||||
//~^ ERROR: this `MutexGuard` is held across an `await` point
|
||||
//~^ ERROR: this `MutexGuard` is held across an await point
|
||||
baz().await
|
||||
};
|
||||
|
||||
|
|
@ -163,7 +163,7 @@ mod parking_lot_mutex {
|
|||
pub fn block_bad(x: &Mutex<u32>) -> impl std::future::Future<Output = u32> + '_ {
|
||||
async move {
|
||||
let guard = x.lock();
|
||||
//~^ ERROR: this `MutexGuard` is held across an `await` point
|
||||
//~^ ERROR: this `MutexGuard` is held across an await point
|
||||
baz().await
|
||||
}
|
||||
}
|
||||
|
|
@ -184,7 +184,7 @@ async fn no_await(x: std::sync::Mutex<u32>) {
|
|||
// `*guard += 1` is removed it is picked up.
|
||||
async fn dropped_before_await(x: std::sync::Mutex<u32>) {
|
||||
let mut guard = x.lock().unwrap();
|
||||
//~^ ERROR: this `MutexGuard` is held across an `await` point
|
||||
//~^ ERROR: this `MutexGuard` is held across an await point
|
||||
*guard += 1;
|
||||
drop(guard);
|
||||
baz().await;
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
error: this `MutexGuard` is held across an `await` point
|
||||
error: this `MutexGuard` is held across an await point
|
||||
--> tests/ui/await_holding_lock.rs:10:13
|
||||
|
|
||||
LL | let guard = x.lock().unwrap();
|
||||
| ^^^^^
|
||||
|
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling await
|
||||
note: these are all the `await` points this lock is held through
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await`
|
||||
note: these are all the await points this lock is held through
|
||||
--> tests/ui/await_holding_lock.rs:12:15
|
||||
|
|
||||
LL | baz().await
|
||||
|
|
@ -13,40 +13,40 @@ LL | baz().await
|
|||
= note: `-D clippy::await-holding-lock` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::await_holding_lock)]`
|
||||
|
||||
error: this `MutexGuard` is held across an `await` point
|
||||
error: this `MutexGuard` is held across an await point
|
||||
--> tests/ui/await_holding_lock.rs:26:13
|
||||
|
|
||||
LL | let guard = x.read().unwrap();
|
||||
| ^^^^^
|
||||
|
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling await
|
||||
note: these are all the `await` points this lock is held through
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await`
|
||||
note: these are all the await points this lock is held through
|
||||
--> tests/ui/await_holding_lock.rs:28:15
|
||||
|
|
||||
LL | baz().await
|
||||
| ^^^^^
|
||||
|
||||
error: this `MutexGuard` is held across an `await` point
|
||||
error: this `MutexGuard` is held across an await point
|
||||
--> tests/ui/await_holding_lock.rs:32:13
|
||||
|
|
||||
LL | let mut guard = x.write().unwrap();
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling await
|
||||
note: these are all the `await` points this lock is held through
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await`
|
||||
note: these are all the await points this lock is held through
|
||||
--> tests/ui/await_holding_lock.rs:34:15
|
||||
|
|
||||
LL | baz().await
|
||||
| ^^^^^
|
||||
|
||||
error: this `MutexGuard` is held across an `await` point
|
||||
error: this `MutexGuard` is held across an await point
|
||||
--> tests/ui/await_holding_lock.rs:54:13
|
||||
|
|
||||
LL | let guard = x.lock().unwrap();
|
||||
| ^^^^^
|
||||
|
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling await
|
||||
note: these are all the `await` points this lock is held through
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await`
|
||||
note: these are all the await points this lock is held through
|
||||
--> tests/ui/await_holding_lock.rs:57:28
|
||||
|
|
||||
LL | let second = baz().await;
|
||||
|
|
@ -55,79 +55,79 @@ LL |
|
|||
LL | let third = baz().await;
|
||||
| ^^^^^
|
||||
|
||||
error: this `MutexGuard` is held across an `await` point
|
||||
error: this `MutexGuard` is held across an await point
|
||||
--> tests/ui/await_holding_lock.rs:68:17
|
||||
|
|
||||
LL | let guard = x.lock().unwrap();
|
||||
| ^^^^^
|
||||
|
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling await
|
||||
note: these are all the `await` points this lock is held through
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await`
|
||||
note: these are all the await points this lock is held through
|
||||
--> tests/ui/await_holding_lock.rs:70:19
|
||||
|
|
||||
LL | baz().await
|
||||
| ^^^^^
|
||||
|
||||
error: this `MutexGuard` is held across an `await` point
|
||||
error: this `MutexGuard` is held across an await point
|
||||
--> tests/ui/await_holding_lock.rs:81:17
|
||||
|
|
||||
LL | let guard = x.lock().unwrap();
|
||||
| ^^^^^
|
||||
|
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling await
|
||||
note: these are all the `await` points this lock is held through
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await`
|
||||
note: these are all the await points this lock is held through
|
||||
--> tests/ui/await_holding_lock.rs:83:19
|
||||
|
|
||||
LL | baz().await
|
||||
| ^^^^^
|
||||
|
||||
error: this `MutexGuard` is held across an `await` point
|
||||
error: this `MutexGuard` is held across an await point
|
||||
--> tests/ui/await_holding_lock.rs:94:13
|
||||
|
|
||||
LL | let guard = x.lock();
|
||||
| ^^^^^
|
||||
|
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling await
|
||||
note: these are all the `await` points this lock is held through
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await`
|
||||
note: these are all the await points this lock is held through
|
||||
--> tests/ui/await_holding_lock.rs:96:15
|
||||
|
|
||||
LL | baz().await
|
||||
| ^^^^^
|
||||
|
||||
error: this `MutexGuard` is held across an `await` point
|
||||
error: this `MutexGuard` is held across an await point
|
||||
--> tests/ui/await_holding_lock.rs:110:13
|
||||
|
|
||||
LL | let guard = x.read();
|
||||
| ^^^^^
|
||||
|
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling await
|
||||
note: these are all the `await` points this lock is held through
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await`
|
||||
note: these are all the await points this lock is held through
|
||||
--> tests/ui/await_holding_lock.rs:112:15
|
||||
|
|
||||
LL | baz().await
|
||||
| ^^^^^
|
||||
|
||||
error: this `MutexGuard` is held across an `await` point
|
||||
error: this `MutexGuard` is held across an await point
|
||||
--> tests/ui/await_holding_lock.rs:116:13
|
||||
|
|
||||
LL | let mut guard = x.write();
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling await
|
||||
note: these are all the `await` points this lock is held through
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await`
|
||||
note: these are all the await points this lock is held through
|
||||
--> tests/ui/await_holding_lock.rs:118:15
|
||||
|
|
||||
LL | baz().await
|
||||
| ^^^^^
|
||||
|
||||
error: this `MutexGuard` is held across an `await` point
|
||||
error: this `MutexGuard` is held across an await point
|
||||
--> tests/ui/await_holding_lock.rs:138:13
|
||||
|
|
||||
LL | let guard = x.lock();
|
||||
| ^^^^^
|
||||
|
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling await
|
||||
note: these are all the `await` points this lock is held through
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await`
|
||||
note: these are all the await points this lock is held through
|
||||
--> tests/ui/await_holding_lock.rs:141:28
|
||||
|
|
||||
LL | let second = baz().await;
|
||||
|
|
@ -136,40 +136,40 @@ LL |
|
|||
LL | let third = baz().await;
|
||||
| ^^^^^
|
||||
|
||||
error: this `MutexGuard` is held across an `await` point
|
||||
error: this `MutexGuard` is held across an await point
|
||||
--> tests/ui/await_holding_lock.rs:152:17
|
||||
|
|
||||
LL | let guard = x.lock();
|
||||
| ^^^^^
|
||||
|
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling await
|
||||
note: these are all the `await` points this lock is held through
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await`
|
||||
note: these are all the await points this lock is held through
|
||||
--> tests/ui/await_holding_lock.rs:154:19
|
||||
|
|
||||
LL | baz().await
|
||||
| ^^^^^
|
||||
|
||||
error: this `MutexGuard` is held across an `await` point
|
||||
error: this `MutexGuard` is held across an await point
|
||||
--> tests/ui/await_holding_lock.rs:165:17
|
||||
|
|
||||
LL | let guard = x.lock();
|
||||
| ^^^^^
|
||||
|
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling await
|
||||
note: these are all the `await` points this lock is held through
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await`
|
||||
note: these are all the await points this lock is held through
|
||||
--> tests/ui/await_holding_lock.rs:167:19
|
||||
|
|
||||
LL | baz().await
|
||||
| ^^^^^
|
||||
|
||||
error: this `MutexGuard` is held across an `await` point
|
||||
error: this `MutexGuard` is held across an await point
|
||||
--> tests/ui/await_holding_lock.rs:186:9
|
||||
|
|
||||
LL | let mut guard = x.lock().unwrap();
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling await
|
||||
note: these are all the `await` points this lock is held through
|
||||
= help: consider using an async-aware `Mutex` type or ensuring the `MutexGuard` is dropped before calling `await`
|
||||
note: these are all the await points this lock is held through
|
||||
--> tests/ui/await_holding_lock.rs:190:11
|
||||
|
|
||||
LL | baz().await;
|
||||
|
|
|
|||
|
|
@ -4,13 +4,13 @@ use std::cell::RefCell;
|
|||
|
||||
async fn bad(x: &RefCell<u32>) -> u32 {
|
||||
let b = x.borrow();
|
||||
//~^ ERROR: this `RefCell` reference is held across an `await` point
|
||||
//~^ ERROR: this `RefCell` reference is held across an await point
|
||||
baz().await
|
||||
}
|
||||
|
||||
async fn bad_mut(x: &RefCell<u32>) -> u32 {
|
||||
let b = x.borrow_mut();
|
||||
//~^ ERROR: this `RefCell` reference is held across an `await` point
|
||||
//~^ ERROR: this `RefCell` reference is held across an await point
|
||||
baz().await
|
||||
}
|
||||
|
||||
|
|
@ -32,7 +32,7 @@ async fn also_bad(x: &RefCell<u32>) -> u32 {
|
|||
let first = baz().await;
|
||||
|
||||
let b = x.borrow_mut();
|
||||
//~^ ERROR: this `RefCell` reference is held across an `await` point
|
||||
//~^ ERROR: this `RefCell` reference is held across an await point
|
||||
|
||||
let second = baz().await;
|
||||
|
||||
|
|
@ -45,7 +45,7 @@ async fn less_bad(x: &RefCell<u32>) -> u32 {
|
|||
let first = baz().await;
|
||||
|
||||
let b = x.borrow_mut();
|
||||
//~^ ERROR: this `RefCell` reference is held across an `await` point
|
||||
//~^ ERROR: this `RefCell` reference is held across an await point
|
||||
|
||||
let second = baz().await;
|
||||
|
||||
|
|
@ -61,7 +61,7 @@ async fn not_good(x: &RefCell<u32>) -> u32 {
|
|||
|
||||
let second = {
|
||||
let b = x.borrow_mut();
|
||||
//~^ ERROR: this `RefCell` reference is held across an `await` point
|
||||
//~^ ERROR: this `RefCell` reference is held across an await point
|
||||
baz().await
|
||||
};
|
||||
|
||||
|
|
@ -74,7 +74,7 @@ async fn not_good(x: &RefCell<u32>) -> u32 {
|
|||
fn block_bad(x: &RefCell<u32>) -> impl std::future::Future<Output = u32> + '_ {
|
||||
async move {
|
||||
let b = x.borrow_mut();
|
||||
//~^ ERROR: this `RefCell` reference is held across an `await` point
|
||||
//~^ ERROR: this `RefCell` reference is held across an await point
|
||||
baz().await
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
error: this `RefCell` reference is held across an `await` point
|
||||
error: this `RefCell` reference is held across an await point
|
||||
--> tests/ui/await_holding_refcell_ref.rs:6:9
|
||||
|
|
||||
LL | let b = x.borrow();
|
||||
| ^
|
||||
|
|
||||
= help: ensure the reference is dropped before calling `await`
|
||||
note: these are all the `await` points this reference is held through
|
||||
note: these are all the await points this reference is held through
|
||||
--> tests/ui/await_holding_refcell_ref.rs:8:11
|
||||
|
|
||||
LL | baz().await
|
||||
|
|
@ -13,27 +13,27 @@ LL | baz().await
|
|||
= note: `-D clippy::await-holding-refcell-ref` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::await_holding_refcell_ref)]`
|
||||
|
||||
error: this `RefCell` reference is held across an `await` point
|
||||
error: this `RefCell` reference is held across an await point
|
||||
--> tests/ui/await_holding_refcell_ref.rs:12:9
|
||||
|
|
||||
LL | let b = x.borrow_mut();
|
||||
| ^
|
||||
|
|
||||
= help: ensure the reference is dropped before calling `await`
|
||||
note: these are all the `await` points this reference is held through
|
||||
note: these are all the await points this reference is held through
|
||||
--> tests/ui/await_holding_refcell_ref.rs:14:11
|
||||
|
|
||||
LL | baz().await
|
||||
| ^^^^^
|
||||
|
||||
error: this `RefCell` reference is held across an `await` point
|
||||
error: this `RefCell` reference is held across an await point
|
||||
--> tests/ui/await_holding_refcell_ref.rs:34:9
|
||||
|
|
||||
LL | let b = x.borrow_mut();
|
||||
| ^
|
||||
|
|
||||
= help: ensure the reference is dropped before calling `await`
|
||||
note: these are all the `await` points this reference is held through
|
||||
note: these are all the await points this reference is held through
|
||||
--> tests/ui/await_holding_refcell_ref.rs:37:24
|
||||
|
|
||||
LL | let second = baz().await;
|
||||
|
|
@ -42,40 +42,40 @@ LL |
|
|||
LL | let third = baz().await;
|
||||
| ^^^^^
|
||||
|
||||
error: this `RefCell` reference is held across an `await` point
|
||||
error: this `RefCell` reference is held across an await point
|
||||
--> tests/ui/await_holding_refcell_ref.rs:47:9
|
||||
|
|
||||
LL | let b = x.borrow_mut();
|
||||
| ^
|
||||
|
|
||||
= help: ensure the reference is dropped before calling `await`
|
||||
note: these are all the `await` points this reference is held through
|
||||
note: these are all the await points this reference is held through
|
||||
--> tests/ui/await_holding_refcell_ref.rs:50:24
|
||||
|
|
||||
LL | let second = baz().await;
|
||||
| ^^^^^
|
||||
|
||||
error: this `RefCell` reference is held across an `await` point
|
||||
error: this `RefCell` reference is held across an await point
|
||||
--> tests/ui/await_holding_refcell_ref.rs:63:13
|
||||
|
|
||||
LL | let b = x.borrow_mut();
|
||||
| ^
|
||||
|
|
||||
= help: ensure the reference is dropped before calling `await`
|
||||
note: these are all the `await` points this reference is held through
|
||||
note: these are all the await points this reference is held through
|
||||
--> tests/ui/await_holding_refcell_ref.rs:65:15
|
||||
|
|
||||
LL | baz().await
|
||||
| ^^^^^
|
||||
|
||||
error: this `RefCell` reference is held across an `await` point
|
||||
error: this `RefCell` reference is held across an await point
|
||||
--> tests/ui/await_holding_refcell_ref.rs:76:13
|
||||
|
|
||||
LL | let b = x.borrow_mut();
|
||||
| ^
|
||||
|
|
||||
= help: ensure the reference is dropped before calling `await`
|
||||
note: these are all the `await` points this reference is held through
|
||||
note: these are all the await points this reference is held through
|
||||
--> tests/ui/await_holding_refcell_ref.rs:78:15
|
||||
|
|
||||
LL | baz().await
|
||||
|
|
|
|||
13
src/tools/clippy/tests/ui/byte_char_slices.fixed
Normal file
13
src/tools/clippy/tests/ui/byte_char_slices.fixed
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#![allow(unused)]
|
||||
#![warn(clippy::byte_char_slices)]
|
||||
|
||||
fn main() {
|
||||
let bad = b"abc";
|
||||
let quotes = b"\"Hi";
|
||||
let quotes = b"'Sup";
|
||||
let escapes = b"\x42Esc";
|
||||
|
||||
let good = &[b'a', 0x42];
|
||||
let good = [b'a', b'a'];
|
||||
let good: u8 = [b'a', b'c'].into_iter().sum();
|
||||
}
|
||||
13
src/tools/clippy/tests/ui/byte_char_slices.rs
Normal file
13
src/tools/clippy/tests/ui/byte_char_slices.rs
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#![allow(unused)]
|
||||
#![warn(clippy::byte_char_slices)]
|
||||
|
||||
fn main() {
|
||||
let bad = &[b'a', b'b', b'c'];
|
||||
let quotes = &[b'"', b'H', b'i'];
|
||||
let quotes = &[b'\'', b'S', b'u', b'p'];
|
||||
let escapes = &[b'\x42', b'E', b's', b'c'];
|
||||
|
||||
let good = &[b'a', 0x42];
|
||||
let good = vec![b'a', b'a'];
|
||||
let good: u8 = [b'a', b'c'].into_iter().sum();
|
||||
}
|
||||
38
src/tools/clippy/tests/ui/byte_char_slices.stderr
Normal file
38
src/tools/clippy/tests/ui/byte_char_slices.stderr
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
error: can be more succinctly written as a byte str
|
||||
--> tests/ui/byte_char_slices.rs:5:15
|
||||
|
|
||||
LL | let bad = &[b'a', b'b', b'c'];
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: try: `b"abc"`
|
||||
|
|
||||
= note: `-D clippy::byte-char-slices` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::byte_char_slices)]`
|
||||
|
||||
error: can be more succinctly written as a byte str
|
||||
--> tests/ui/byte_char_slices.rs:6:18
|
||||
|
|
||||
LL | let quotes = &[b'"', b'H', b'i'];
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: try: `b"\"Hi"`
|
||||
|
||||
error: can be more succinctly written as a byte str
|
||||
--> tests/ui/byte_char_slices.rs:7:18
|
||||
|
|
||||
LL | let quotes = &[b'\'', b'S', b'u', b'p'];
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `b"'Sup"`
|
||||
|
||||
error: can be more succinctly written as a byte str
|
||||
--> tests/ui/byte_char_slices.rs:8:19
|
||||
|
|
||||
LL | let escapes = &[b'\x42', b'E', b's', b'c'];
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `b"\x42Esc"`
|
||||
|
||||
error: useless use of `vec!`
|
||||
--> tests/ui/byte_char_slices.rs:11:16
|
||||
|
|
||||
LL | let good = vec![b'a', b'a'];
|
||||
| ^^^^^^^^^^^^^^^^ help: you can use an array directly: `[b'a', b'a']`
|
||||
|
|
||||
= note: `-D clippy::useless-vec` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::useless_vec)]`
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
32
src/tools/clippy/tests/ui/cfg_not_test.rs
Normal file
32
src/tools/clippy/tests/ui/cfg_not_test.rs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
#![allow(unused)]
|
||||
#![warn(clippy::cfg_not_test)]
|
||||
|
||||
fn important_check() {}
|
||||
|
||||
fn main() {
|
||||
// Statement
|
||||
#[cfg(not(test))]
|
||||
let answer = 42;
|
||||
|
||||
// Expression
|
||||
#[cfg(not(test))]
|
||||
important_check();
|
||||
|
||||
// Make sure only not(test) are checked, not other attributes
|
||||
#[cfg(not(foo))]
|
||||
important_check();
|
||||
}
|
||||
|
||||
#[cfg(not(not(test)))]
|
||||
struct CfgNotTest;
|
||||
|
||||
// Deeply nested `not(test)`
|
||||
#[cfg(not(test))]
|
||||
fn foo() {}
|
||||
#[cfg(all(debug_assertions, not(test)))]
|
||||
fn bar() {}
|
||||
#[cfg(not(any(not(debug_assertions), test)))]
|
||||
fn baz() {}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {}
|
||||
45
src/tools/clippy/tests/ui/cfg_not_test.stderr
Normal file
45
src/tools/clippy/tests/ui/cfg_not_test.stderr
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
error: code is excluded from test builds
|
||||
--> tests/ui/cfg_not_test.rs:8:5
|
||||
|
|
||||
LL | #[cfg(not(test))]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: consider not excluding any code from test builds
|
||||
= note: this could increase code coverage despite not actually being tested
|
||||
= note: `-D clippy::cfg-not-test` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::cfg_not_test)]`
|
||||
|
||||
error: code is excluded from test builds
|
||||
--> tests/ui/cfg_not_test.rs:12:5
|
||||
|
|
||||
LL | #[cfg(not(test))]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: consider not excluding any code from test builds
|
||||
|
||||
error: code is excluded from test builds
|
||||
--> tests/ui/cfg_not_test.rs:24:1
|
||||
|
|
||||
LL | #[cfg(not(test))]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: consider not excluding any code from test builds
|
||||
|
||||
error: code is excluded from test builds
|
||||
--> tests/ui/cfg_not_test.rs:26:1
|
||||
|
|
||||
LL | #[cfg(all(debug_assertions, not(test)))]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: consider not excluding any code from test builds
|
||||
|
||||
error: code is excluded from test builds
|
||||
--> tests/ui/cfg_not_test.rs:28:1
|
||||
|
|
||||
LL | #[cfg(not(any(not(debug_assertions), test)))]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: consider not excluding any code from test builds
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/crashes/ice-12616.rs:6:5
|
||||
|
|
||||
LL | s() as *const ();
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ fn issue_1647_ref_mut() {
|
|||
//~^ ERROR: use of a disallowed/placeholder name `quux`
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
fn issue_7305() {
|
||||
// `disallowed_names` lint should not be triggered inside of the test code.
|
||||
|
|
|
|||
47
src/tools/clippy/tests/ui/doc/doc_lazy_blank_line.fixed
Normal file
47
src/tools/clippy/tests/ui/doc/doc_lazy_blank_line.fixed
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
// https://github.com/rust-lang/rust-clippy/issues/12917
|
||||
#![warn(clippy::doc_lazy_continuation)]
|
||||
|
||||
/// This is a constant.
|
||||
///
|
||||
/// The meaning of which should not be explained.
|
||||
pub const A: i32 = 42;
|
||||
|
||||
/// This is another constant, no longer used.
|
||||
///
|
||||
/// This block of documentation has a long
|
||||
/// explanation and derivation to explain
|
||||
/// why it is what it is, and how it's used.
|
||||
///
|
||||
/// It is left here for historical reasons, and
|
||||
/// for reference.
|
||||
///
|
||||
/// Reasons it's great:
|
||||
/// - First reason
|
||||
/// - Second reason
|
||||
///
|
||||
//pub const B: i32 = 1337;
|
||||
|
||||
/// This is yet another constant.
|
||||
///
|
||||
/// This has a similar fate as `B`.
|
||||
///
|
||||
/// Reasons it's useful:
|
||||
/// 1. First reason
|
||||
/// 2. Second reason
|
||||
///
|
||||
//pub const C: i32 = 8008;
|
||||
|
||||
/// This is still in use.
|
||||
pub const D: i32 = 20;
|
||||
|
||||
/// > blockquote code path
|
||||
///
|
||||
|
||||
/// bottom text
|
||||
pub const E: i32 = 20;
|
||||
|
||||
/// > blockquote code path
|
||||
///
|
||||
#[repr(C)]
|
||||
/// bottom text
|
||||
pub struct Foo(i32);
|
||||
43
src/tools/clippy/tests/ui/doc/doc_lazy_blank_line.rs
Normal file
43
src/tools/clippy/tests/ui/doc/doc_lazy_blank_line.rs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
// https://github.com/rust-lang/rust-clippy/issues/12917
|
||||
#![warn(clippy::doc_lazy_continuation)]
|
||||
|
||||
/// This is a constant.
|
||||
///
|
||||
/// The meaning of which should not be explained.
|
||||
pub const A: i32 = 42;
|
||||
|
||||
/// This is another constant, no longer used.
|
||||
///
|
||||
/// This block of documentation has a long
|
||||
/// explanation and derivation to explain
|
||||
/// why it is what it is, and how it's used.
|
||||
///
|
||||
/// It is left here for historical reasons, and
|
||||
/// for reference.
|
||||
///
|
||||
/// Reasons it's great:
|
||||
/// - First reason
|
||||
/// - Second reason
|
||||
//pub const B: i32 = 1337;
|
||||
|
||||
/// This is yet another constant.
|
||||
///
|
||||
/// This has a similar fate as `B`.
|
||||
///
|
||||
/// Reasons it's useful:
|
||||
/// 1. First reason
|
||||
/// 2. Second reason
|
||||
//pub const C: i32 = 8008;
|
||||
|
||||
/// This is still in use.
|
||||
pub const D: i32 = 20;
|
||||
|
||||
/// > blockquote code path
|
||||
|
||||
/// bottom text
|
||||
pub const E: i32 = 20;
|
||||
|
||||
/// > blockquote code path
|
||||
#[repr(C)]
|
||||
/// bottom text
|
||||
pub struct Foo(i32);
|
||||
56
src/tools/clippy/tests/ui/doc/doc_lazy_blank_line.stderr
Normal file
56
src/tools/clippy/tests/ui/doc/doc_lazy_blank_line.stderr
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
error: doc list item without indentation
|
||||
--> tests/ui/doc/doc_lazy_blank_line.rs:23:5
|
||||
|
|
||||
LL | /// This is yet another constant.
|
||||
| ^
|
||||
|
|
||||
= help: if this is intended to be part of the list, indent 3 spaces
|
||||
= note: `-D clippy::doc-lazy-continuation` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::doc_lazy_continuation)]`
|
||||
help: if this should be its own paragraph, add a blank doc comment line
|
||||
|
|
||||
LL ~ /// - Second reason
|
||||
LL + ///
|
||||
|
|
||||
|
||||
error: doc list item without indentation
|
||||
--> tests/ui/doc/doc_lazy_blank_line.rs:32:5
|
||||
|
|
||||
LL | /// This is still in use.
|
||||
| ^
|
||||
|
|
||||
= help: if this is intended to be part of the list, indent 4 spaces
|
||||
help: if this should be its own paragraph, add a blank doc comment line
|
||||
|
|
||||
LL ~ /// 2. Second reason
|
||||
LL + ///
|
||||
|
|
||||
|
||||
error: doc quote line without `>` marker
|
||||
--> tests/ui/doc/doc_lazy_blank_line.rs:37:5
|
||||
|
|
||||
LL | /// bottom text
|
||||
| ^
|
||||
|
|
||||
= help: if this not intended to be a quote at all, escape it with `\>`
|
||||
help: if this should be its own paragraph, add a blank doc comment line
|
||||
|
|
||||
LL ~ /// > blockquote code path
|
||||
LL + ///
|
||||
|
|
||||
|
||||
error: doc quote line without `>` marker
|
||||
--> tests/ui/doc/doc_lazy_blank_line.rs:42:5
|
||||
|
|
||||
LL | /// bottom text
|
||||
| ^
|
||||
|
|
||||
= help: if this not intended to be a quote at all, escape it with `\>`
|
||||
help: if this should be its own paragraph, add a blank doc comment line
|
||||
|
|
||||
LL ~ /// > blockquote code path
|
||||
LL + ///
|
||||
|
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
/// > blockquote with
|
||||
/// > lazy continuation
|
||||
//~^ ERROR: doc quote missing `>` marker
|
||||
//~^ ERROR: doc quote line without `>` marker
|
||||
fn first() {}
|
||||
|
||||
/// > blockquote with no
|
||||
|
|
@ -18,24 +18,24 @@ fn two_nowarn() {}
|
|||
/// >
|
||||
/// > > nest here
|
||||
/// > > lazy continuation
|
||||
//~^ ERROR: doc quote missing `>` marker
|
||||
//~^ ERROR: doc quote line without `>` marker
|
||||
fn two() {}
|
||||
|
||||
/// > nest here
|
||||
/// >
|
||||
/// > > nest here
|
||||
/// > > lazy continuation
|
||||
//~^ ERROR: doc quote missing `>` marker
|
||||
//~^ ERROR: doc quote line without `>` marker
|
||||
fn three() {}
|
||||
|
||||
/// > * > nest here
|
||||
/// > > lazy continuation
|
||||
//~^ ERROR: doc quote missing `>` marker
|
||||
//~^ ERROR: doc quote line without `>` marker
|
||||
fn four() {}
|
||||
|
||||
/// > * > nest here
|
||||
/// > > lazy continuation
|
||||
//~^ ERROR: doc quote missing `>` marker
|
||||
//~^ ERROR: doc quote line without `>` marker
|
||||
fn four_point_1() {}
|
||||
|
||||
/// * > nest here lazy continuation
|
||||
|
|
@ -43,5 +43,5 @@ fn five() {}
|
|||
|
||||
/// 1. > nest here
|
||||
/// > lazy continuation (this results in strange indentation, but still works)
|
||||
//~^ ERROR: doc quote missing `>` marker
|
||||
//~^ ERROR: doc quote line without `>` marker
|
||||
fn six() {}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
/// > blockquote with
|
||||
/// lazy continuation
|
||||
//~^ ERROR: doc quote missing `>` marker
|
||||
//~^ ERROR: doc quote line without `>` marker
|
||||
fn first() {}
|
||||
|
||||
/// > blockquote with no
|
||||
|
|
@ -18,24 +18,24 @@ fn two_nowarn() {}
|
|||
/// >
|
||||
/// > > nest here
|
||||
/// > lazy continuation
|
||||
//~^ ERROR: doc quote missing `>` marker
|
||||
//~^ ERROR: doc quote line without `>` marker
|
||||
fn two() {}
|
||||
|
||||
/// > nest here
|
||||
/// >
|
||||
/// > > nest here
|
||||
/// lazy continuation
|
||||
//~^ ERROR: doc quote missing `>` marker
|
||||
//~^ ERROR: doc quote line without `>` marker
|
||||
fn three() {}
|
||||
|
||||
/// > * > nest here
|
||||
/// lazy continuation
|
||||
//~^ ERROR: doc quote missing `>` marker
|
||||
//~^ ERROR: doc quote line without `>` marker
|
||||
fn four() {}
|
||||
|
||||
/// > * > nest here
|
||||
/// lazy continuation
|
||||
//~^ ERROR: doc quote missing `>` marker
|
||||
//~^ ERROR: doc quote line without `>` marker
|
||||
fn four_point_1() {}
|
||||
|
||||
/// * > nest here lazy continuation
|
||||
|
|
@ -43,5 +43,5 @@ fn five() {}
|
|||
|
||||
/// 1. > nest here
|
||||
/// lazy continuation (this results in strange indentation, but still works)
|
||||
//~^ ERROR: doc quote missing `>` marker
|
||||
//~^ ERROR: doc quote line without `>` marker
|
||||
fn six() {}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
error: doc quote missing `>` marker
|
||||
error: doc quote line without `>` marker
|
||||
--> tests/ui/doc/doc_lazy_blockquote.rs:4:5
|
||||
|
|
||||
LL | /// lazy continuation
|
||||
|
|
@ -12,7 +12,7 @@ help: add markers to start of line
|
|||
LL | /// > lazy continuation
|
||||
| +
|
||||
|
||||
error: doc quote missing `>` marker
|
||||
error: doc quote line without `>` marker
|
||||
--> tests/ui/doc/doc_lazy_blockquote.rs:20:5
|
||||
|
|
||||
LL | /// > lazy continuation
|
||||
|
|
@ -24,7 +24,7 @@ help: add markers to start of line
|
|||
LL | /// > > lazy continuation
|
||||
| +
|
||||
|
||||
error: doc quote missing `>` marker
|
||||
error: doc quote line without `>` marker
|
||||
--> tests/ui/doc/doc_lazy_blockquote.rs:27:5
|
||||
|
|
||||
LL | /// lazy continuation
|
||||
|
|
@ -36,7 +36,7 @@ help: add markers to start of line
|
|||
LL | /// > > lazy continuation
|
||||
| +++
|
||||
|
||||
error: doc quote missing `>` marker
|
||||
error: doc quote line without `>` marker
|
||||
--> tests/ui/doc/doc_lazy_blockquote.rs:32:5
|
||||
|
|
||||
LL | /// lazy continuation
|
||||
|
|
@ -48,7 +48,7 @@ help: add markers to start of line
|
|||
LL | /// > > lazy continuation
|
||||
| +++++++
|
||||
|
||||
error: doc quote missing `>` marker
|
||||
error: doc quote line without `>` marker
|
||||
--> tests/ui/doc/doc_lazy_blockquote.rs:37:5
|
||||
|
|
||||
LL | /// lazy continuation
|
||||
|
|
@ -60,7 +60,7 @@ help: add markers to start of line
|
|||
LL | /// > > lazy continuation
|
||||
| +++++
|
||||
|
||||
error: doc quote missing `>` marker
|
||||
error: doc quote line without `>` marker
|
||||
--> tests/ui/doc/doc_lazy_blockquote.rs:45:5
|
||||
|
|
||||
LL | /// lazy continuation (this results in strange indentation, but still works)
|
||||
|
|
|
|||
|
|
@ -2,38 +2,41 @@
|
|||
|
||||
/// 1. nest here
|
||||
/// lazy continuation
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn one() {}
|
||||
|
||||
/// 1. first line
|
||||
/// lazy list continuations don't make warnings with this lint
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
/// because they don't have the
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
///
|
||||
//~^ ERROR: doc list item without indentation
|
||||
/// because they don't have the
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn two() {}
|
||||
|
||||
/// - nest here
|
||||
/// lazy continuation
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn three() {}
|
||||
|
||||
/// - first line
|
||||
/// lazy list continuations don't make warnings with this lint
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
/// because they don't have the
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
///
|
||||
//~^ ERROR: doc list item without indentation
|
||||
/// because they don't have the
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn four() {}
|
||||
|
||||
/// - nest here
|
||||
/// lazy continuation
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn five() {}
|
||||
|
||||
/// - - first line
|
||||
/// this will warn on the lazy continuation
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
/// and so should this
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
///
|
||||
//~^ ERROR: doc list item without indentation
|
||||
/// and so should this
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn six() {}
|
||||
|
||||
/// - - first line
|
||||
|
|
@ -54,7 +57,7 @@ fn seven() {}
|
|||
/// * `protocol_descriptors`: A Json Representation of the ProtocolDescriptors
|
||||
/// to set up. Example:
|
||||
/// 'protocol_descriptors': [
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
/// {
|
||||
/// 'protocol': 25, # u64 Representation of ProtocolIdentifier::AVDTP
|
||||
/// 'params': [
|
||||
|
|
@ -73,5 +76,5 @@ fn seven() {}
|
|||
/// }]
|
||||
/// }
|
||||
/// ]
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn eight() {}
|
||||
|
|
|
|||
|
|
@ -2,38 +2,38 @@
|
|||
|
||||
/// 1. nest here
|
||||
/// lazy continuation
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn one() {}
|
||||
|
||||
/// 1. first line
|
||||
/// lazy list continuations don't make warnings with this lint
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
/// because they don't have the
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn two() {}
|
||||
|
||||
/// - nest here
|
||||
/// lazy continuation
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn three() {}
|
||||
|
||||
/// - first line
|
||||
/// lazy list continuations don't make warnings with this lint
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
/// because they don't have the
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn four() {}
|
||||
|
||||
/// - nest here
|
||||
/// lazy continuation
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn five() {}
|
||||
|
||||
/// - - first line
|
||||
/// this will warn on the lazy continuation
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
/// and so should this
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn six() {}
|
||||
|
||||
/// - - first line
|
||||
|
|
@ -54,7 +54,7 @@ fn seven() {}
|
|||
/// * `protocol_descriptors`: A Json Representation of the ProtocolDescriptors
|
||||
/// to set up. Example:
|
||||
/// 'protocol_descriptors': [
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
/// {
|
||||
/// 'protocol': 25, # u64 Representation of ProtocolIdentifier::AVDTP
|
||||
/// 'params': [
|
||||
|
|
@ -73,5 +73,5 @@ fn seven() {}
|
|||
/// }]
|
||||
/// }
|
||||
/// ]
|
||||
//~^ ERROR: doc list item missing indentation
|
||||
//~^ ERROR: doc list item without indentation
|
||||
fn eight() {}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
error: doc list item missing indentation
|
||||
error: doc list item without indentation
|
||||
--> tests/ui/doc/doc_lazy_list.rs:4:5
|
||||
|
|
||||
LL | /// lazy continuation
|
||||
|
|
@ -12,7 +12,7 @@ help: indent this line
|
|||
LL | /// lazy continuation
|
||||
| +++
|
||||
|
||||
error: doc list item missing indentation
|
||||
error: doc list item without indentation
|
||||
--> tests/ui/doc/doc_lazy_list.rs:9:5
|
||||
|
|
||||
LL | /// lazy list continuations don't make warnings with this lint
|
||||
|
|
@ -24,19 +24,20 @@ help: indent this line
|
|||
LL | /// lazy list continuations don't make warnings with this lint
|
||||
| +++
|
||||
|
||||
error: doc list item missing indentation
|
||||
error: doc list item without indentation
|
||||
--> tests/ui/doc/doc_lazy_list.rs:11:5
|
||||
|
|
||||
LL | /// because they don't have the
|
||||
| ^
|
||||
|
|
||||
= help: if this is supposed to be its own paragraph, add a blank line
|
||||
help: indent this line
|
||||
= help: if this is intended to be part of the list, indent 3 spaces
|
||||
help: if this should be its own paragraph, add a blank doc comment line
|
||||
|
|
||||
LL ~ /// lazy list continuations don't make warnings with this lint
|
||||
LL + ///
|
||||
|
|
||||
LL | /// because they don't have the
|
||||
| +++
|
||||
|
||||
error: doc list item missing indentation
|
||||
error: doc list item without indentation
|
||||
--> tests/ui/doc/doc_lazy_list.rs:16:5
|
||||
|
|
||||
LL | /// lazy continuation
|
||||
|
|
@ -48,7 +49,7 @@ help: indent this line
|
|||
LL | /// lazy continuation
|
||||
| ++++
|
||||
|
||||
error: doc list item missing indentation
|
||||
error: doc list item without indentation
|
||||
--> tests/ui/doc/doc_lazy_list.rs:21:5
|
||||
|
|
||||
LL | /// lazy list continuations don't make warnings with this lint
|
||||
|
|
@ -60,19 +61,20 @@ help: indent this line
|
|||
LL | /// lazy list continuations don't make warnings with this lint
|
||||
| ++++
|
||||
|
||||
error: doc list item missing indentation
|
||||
error: doc list item without indentation
|
||||
--> tests/ui/doc/doc_lazy_list.rs:23:5
|
||||
|
|
||||
LL | /// because they don't have the
|
||||
| ^
|
||||
|
|
||||
= help: if this is supposed to be its own paragraph, add a blank line
|
||||
help: indent this line
|
||||
= help: if this is intended to be part of the list, indent 4 spaces
|
||||
help: if this should be its own paragraph, add a blank doc comment line
|
||||
|
|
||||
LL ~ /// lazy list continuations don't make warnings with this lint
|
||||
LL + ///
|
||||
|
|
||||
LL | /// because they don't have the
|
||||
| ++++
|
||||
|
||||
error: doc list item missing indentation
|
||||
error: doc list item without indentation
|
||||
--> tests/ui/doc/doc_lazy_list.rs:28:5
|
||||
|
|
||||
LL | /// lazy continuation
|
||||
|
|
@ -84,7 +86,7 @@ help: indent this line
|
|||
LL | /// lazy continuation
|
||||
| ++++
|
||||
|
||||
error: doc list item missing indentation
|
||||
error: doc list item without indentation
|
||||
--> tests/ui/doc/doc_lazy_list.rs:33:5
|
||||
|
|
||||
LL | /// this will warn on the lazy continuation
|
||||
|
|
@ -96,19 +98,20 @@ help: indent this line
|
|||
LL | /// this will warn on the lazy continuation
|
||||
| ++++++
|
||||
|
||||
error: doc list item missing indentation
|
||||
error: doc list item without indentation
|
||||
--> tests/ui/doc/doc_lazy_list.rs:35:5
|
||||
|
|
||||
LL | /// and so should this
|
||||
| ^^^^
|
||||
|
|
||||
= help: if this is supposed to be its own paragraph, add a blank line
|
||||
help: indent this line
|
||||
= help: if this is intended to be part of the list, indent 2 spaces
|
||||
help: if this should be its own paragraph, add a blank doc comment line
|
||||
|
|
||||
LL ~ /// this will warn on the lazy continuation
|
||||
LL + ///
|
||||
|
|
||||
LL | /// and so should this
|
||||
| ++
|
||||
|
||||
error: doc list item missing indentation
|
||||
error: doc list item without indentation
|
||||
--> tests/ui/doc/doc_lazy_list.rs:56:5
|
||||
|
|
||||
LL | /// 'protocol_descriptors': [
|
||||
|
|
@ -120,7 +123,7 @@ help: indent this line
|
|||
LL | /// 'protocol_descriptors': [
|
||||
| +
|
||||
|
||||
error: doc list item missing indentation
|
||||
error: doc list item without indentation
|
||||
--> tests/ui/doc/doc_lazy_list.rs:75:5
|
||||
|
|
||||
LL | /// ]
|
||||
|
|
|
|||
|
|
@ -49,3 +49,20 @@ fn other_markdown() {}
|
|||
/// pub struct Struct;
|
||||
/// ```
|
||||
fn issue_7421() {}
|
||||
|
||||
/// `
|
||||
//~^ ERROR: backticks are unbalanced
|
||||
fn escape_0() {}
|
||||
|
||||
/// Escaped \` backticks don't count.
|
||||
fn escape_1() {}
|
||||
|
||||
/// Escaped \` \` backticks don't count.
|
||||
fn escape_2() {}
|
||||
|
||||
/// Escaped \` ` backticks don't count, but unescaped backticks do.
|
||||
//~^ ERROR: backticks are unbalanced
|
||||
fn escape_3() {}
|
||||
|
||||
/// Backslashes ` \` within code blocks don't count.
|
||||
fn escape_4() {}
|
||||
|
|
|
|||
|
|
@ -78,5 +78,21 @@ help: try
|
|||
LL | /// - This item needs `backticks_here`
|
||||
| ~~~~~~~~~~~~~~~~
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
error: backticks are unbalanced
|
||||
--> tests/ui/doc/unbalanced_ticks.rs:53:5
|
||||
|
|
||||
LL | /// `
|
||||
| ^
|
||||
|
|
||||
= help: a backtick may be missing a pair
|
||||
|
||||
error: backticks are unbalanced
|
||||
--> tests/ui/doc/unbalanced_ticks.rs:63:5
|
||||
|
|
||||
LL | /// Escaped \` ` backticks don't count, but unescaped backticks do.
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= help: a backtick may be missing a pair
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -345,3 +345,39 @@ fn main() {
|
|||
let _ = &mut ({ *x.u }).x;
|
||||
}
|
||||
}
|
||||
|
||||
mod issue_12969 {
|
||||
use std::ops::Deref;
|
||||
|
||||
struct Wrapper<T>(T);
|
||||
|
||||
impl<T> Deref for Wrapper<T> {
|
||||
type Target = T;
|
||||
|
||||
fn deref(&self) -> &T {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
||||
fn foo(_bar: &str) {}
|
||||
|
||||
fn bar() {
|
||||
let wrapped_bar = Wrapper("");
|
||||
|
||||
foo(&wrapped_bar);
|
||||
}
|
||||
}
|
||||
|
||||
mod issue_9841 {
|
||||
fn takes_array_ref<T, const N: usize>(array: &&[T; N]) {
|
||||
takes_slice(*array)
|
||||
}
|
||||
|
||||
fn takes_array_ref_ref<T, const N: usize>(array: &&&[T; N]) {
|
||||
takes_slice(**array)
|
||||
}
|
||||
|
||||
fn takes_slice<T>(slice: &[T]) {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -345,3 +345,39 @@ fn main() {
|
|||
let _ = &mut ({ *x.u }).x;
|
||||
}
|
||||
}
|
||||
|
||||
mod issue_12969 {
|
||||
use std::ops::Deref;
|
||||
|
||||
struct Wrapper<T>(T);
|
||||
|
||||
impl<T> Deref for Wrapper<T> {
|
||||
type Target = T;
|
||||
|
||||
fn deref(&self) -> &T {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
||||
fn foo(_bar: &str) {}
|
||||
|
||||
fn bar() {
|
||||
let wrapped_bar = Wrapper("");
|
||||
|
||||
foo(&*wrapped_bar);
|
||||
}
|
||||
}
|
||||
|
||||
mod issue_9841 {
|
||||
fn takes_array_ref<T, const N: usize>(array: &&[T; N]) {
|
||||
takes_slice(*array)
|
||||
}
|
||||
|
||||
fn takes_array_ref_ref<T, const N: usize>(array: &&&[T; N]) {
|
||||
takes_slice(**array)
|
||||
}
|
||||
|
||||
fn takes_slice<T>(slice: &[T]) {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -271,5 +271,11 @@ error: deref which would be done by auto-deref
|
|||
LL | let _ = &mut (*{ x.u }).x;
|
||||
| ^^^^^^^^^^ help: try: `{ x.u }`
|
||||
|
||||
error: aborting due to 45 previous errors
|
||||
error: deref which would be done by auto-deref
|
||||
--> tests/ui/explicit_auto_deref.rs:367:13
|
||||
|
|
||||
LL | foo(&*wrapped_bar);
|
||||
| ^^^^^^^^^^^^^ help: try: `&wrapped_bar`
|
||||
|
||||
error: aborting due to 46 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -71,19 +71,16 @@ fn main() {
|
|||
twice(ONE) != ONE;
|
||||
ONE as f64 != 2.0;
|
||||
//~^ ERROR: strict comparison of `f32` or `f64`
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
ONE as f64 != 0.0; // no error, comparison with zero is ok
|
||||
|
||||
let x: f64 = 1.0;
|
||||
|
||||
x == 1.0;
|
||||
//~^ ERROR: strict comparison of `f32` or `f64`
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
x != 0f64; // no error, comparison with zero is ok
|
||||
|
||||
twice(x) != twice(ONE as f64);
|
||||
//~^ ERROR: strict comparison of `f32` or `f64`
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
x < 0.0; // no errors, lower or greater comparisons need no fuzzyness
|
||||
x > 0.0;
|
||||
|
|
@ -105,17 +102,14 @@ fn main() {
|
|||
ZERO_ARRAY[i] == NON_ZERO_ARRAY[j]; // ok, because lhs is zero regardless of i
|
||||
NON_ZERO_ARRAY[i] == NON_ZERO_ARRAY[j];
|
||||
//~^ ERROR: strict comparison of `f32` or `f64`
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
let a1: [f32; 1] = [0.0];
|
||||
let a2: [f32; 1] = [1.1];
|
||||
|
||||
a1 == a2;
|
||||
//~^ ERROR: strict comparison of `f32` or `f64` arrays
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
a1[0] == a2[0];
|
||||
//~^ ERROR: strict comparison of `f32` or `f64`
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
// no errors - comparing signums is ok
|
||||
let x32 = 3.21f32;
|
||||
|
|
|
|||
|
|
@ -4,49 +4,38 @@ error: strict comparison of `f32` or `f64`
|
|||
LL | ONE as f64 != 2.0;
|
||||
| ^^^^^^^^^^^^^^^^^ help: consider comparing them within some margin of error: `(ONE as f64 - 2.0).abs() > error_margin`
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
= note: `-D clippy::float-cmp` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::float_cmp)]`
|
||||
|
||||
error: strict comparison of `f32` or `f64`
|
||||
--> tests/ui/float_cmp.rs:79:5
|
||||
--> tests/ui/float_cmp.rs:78:5
|
||||
|
|
||||
LL | x == 1.0;
|
||||
| ^^^^^^^^ help: consider comparing them within some margin of error: `(x - 1.0).abs() < error_margin`
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
error: strict comparison of `f32` or `f64`
|
||||
--> tests/ui/float_cmp.rs:84:5
|
||||
--> tests/ui/float_cmp.rs:82:5
|
||||
|
|
||||
LL | twice(x) != twice(ONE as f64);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some margin of error: `(twice(x) - twice(ONE as f64)).abs() > error_margin`
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
error: strict comparison of `f32` or `f64`
|
||||
--> tests/ui/float_cmp.rs:106:5
|
||||
--> tests/ui/float_cmp.rs:103:5
|
||||
|
|
||||
LL | NON_ZERO_ARRAY[i] == NON_ZERO_ARRAY[j];
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider comparing them within some margin of error: `(NON_ZERO_ARRAY[i] - NON_ZERO_ARRAY[j]).abs() < error_margin`
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
error: strict comparison of `f32` or `f64` arrays
|
||||
--> tests/ui/float_cmp.rs:113:5
|
||||
--> tests/ui/float_cmp.rs:109:5
|
||||
|
|
||||
LL | a1 == a2;
|
||||
| ^^^^^^^^
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
error: strict comparison of `f32` or `f64`
|
||||
--> tests/ui/float_cmp.rs:116:5
|
||||
--> tests/ui/float_cmp.rs:111:5
|
||||
|
|
||||
LL | a1[0] == a2[0];
|
||||
| ^^^^^^^^^^^^^^ help: consider comparing them within some margin of error: `(a1[0] - a2[0]).abs() < error_margin`
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -15,28 +15,21 @@ fn main() {
|
|||
// has errors
|
||||
1f32 == ONE;
|
||||
//~^ ERROR: strict comparison of `f32` or `f64` constant
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
TWO == ONE;
|
||||
//~^ ERROR: strict comparison of `f32` or `f64` constant
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
TWO != ONE;
|
||||
//~^ ERROR: strict comparison of `f32` or `f64` constant
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
ONE + ONE == TWO;
|
||||
//~^ ERROR: strict comparison of `f32` or `f64` constant
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
let x = 1;
|
||||
x as f32 == ONE;
|
||||
//~^ ERROR: strict comparison of `f32` or `f64` constant
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
let v = 0.9;
|
||||
v == ONE;
|
||||
//~^ ERROR: strict comparison of `f32` or `f64` constant
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
v != ONE;
|
||||
//~^ ERROR: strict comparison of `f32` or `f64` constant
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
// no errors, lower than or greater than comparisons
|
||||
v < ONE;
|
||||
|
|
@ -70,5 +63,4 @@ fn main() {
|
|||
// has errors
|
||||
NON_ZERO_ARRAY == NON_ZERO_ARRAY2;
|
||||
//~^ ERROR: strict comparison of `f32` or `f64` constant arrays
|
||||
//~| NOTE: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,65 +4,50 @@ error: strict comparison of `f32` or `f64` constant
|
|||
LL | 1f32 == ONE;
|
||||
| ^^^^^^^^^^^ help: consider comparing them within some margin of error: `(1f32 - ONE).abs() < error_margin`
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
= note: `-D clippy::float-cmp-const` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::float_cmp_const)]`
|
||||
|
||||
error: strict comparison of `f32` or `f64` constant
|
||||
--> tests/ui/float_cmp_const.rs:19:5
|
||||
--> tests/ui/float_cmp_const.rs:18:5
|
||||
|
|
||||
LL | TWO == ONE;
|
||||
| ^^^^^^^^^^ help: consider comparing them within some margin of error: `(TWO - ONE).abs() < error_margin`
|
||||
|
||||
error: strict comparison of `f32` or `f64` constant
|
||||
--> tests/ui/float_cmp_const.rs:20:5
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
LL | TWO != ONE;
|
||||
| ^^^^^^^^^^ help: consider comparing them within some margin of error: `(TWO - ONE).abs() > error_margin`
|
||||
|
||||
error: strict comparison of `f32` or `f64` constant
|
||||
--> tests/ui/float_cmp_const.rs:22:5
|
||||
|
|
||||
LL | TWO != ONE;
|
||||
| ^^^^^^^^^^ help: consider comparing them within some margin of error: `(TWO - ONE).abs() > error_margin`
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
LL | ONE + ONE == TWO;
|
||||
| ^^^^^^^^^^^^^^^^ help: consider comparing them within some margin of error: `(ONE + ONE - TWO).abs() < error_margin`
|
||||
|
||||
error: strict comparison of `f32` or `f64` constant
|
||||
--> tests/ui/float_cmp_const.rs:25:5
|
||||
|
|
||||
LL | ONE + ONE == TWO;
|
||||
| ^^^^^^^^^^^^^^^^ help: consider comparing them within some margin of error: `(ONE + ONE - TWO).abs() < error_margin`
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
LL | x as f32 == ONE;
|
||||
| ^^^^^^^^^^^^^^^ help: consider comparing them within some margin of error: `(x as f32 - ONE).abs() < error_margin`
|
||||
|
||||
error: strict comparison of `f32` or `f64` constant
|
||||
--> tests/ui/float_cmp_const.rs:29:5
|
||||
|
|
||||
LL | x as f32 == ONE;
|
||||
| ^^^^^^^^^^^^^^^ help: consider comparing them within some margin of error: `(x as f32 - ONE).abs() < error_margin`
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
error: strict comparison of `f32` or `f64` constant
|
||||
--> tests/ui/float_cmp_const.rs:34:5
|
||||
|
|
||||
LL | v == ONE;
|
||||
| ^^^^^^^^ help: consider comparing them within some margin of error: `(v - ONE).abs() < error_margin`
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
error: strict comparison of `f32` or `f64` constant
|
||||
--> tests/ui/float_cmp_const.rs:37:5
|
||||
--> tests/ui/float_cmp_const.rs:31:5
|
||||
|
|
||||
LL | v != ONE;
|
||||
| ^^^^^^^^ help: consider comparing them within some margin of error: `(v - ONE).abs() > error_margin`
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
error: strict comparison of `f32` or `f64` constant arrays
|
||||
--> tests/ui/float_cmp_const.rs:71:5
|
||||
--> tests/ui/float_cmp_const.rs:64:5
|
||||
|
|
||||
LL | NON_ZERO_ARRAY == NON_ZERO_ARRAY2;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: `f32::EPSILON` and `f64::EPSILON` are available for the `error_margin`
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -39,4 +39,13 @@ fn main() {
|
|||
struct TupleStructVec(Vec<usize>);
|
||||
|
||||
let _ = TupleStructVec(vec![0, 1, 2, 3]);
|
||||
|
||||
{
|
||||
struct S(i32, i32);
|
||||
let mut iter = [1i32, 1i32].into_iter();
|
||||
let _ = S {
|
||||
1: iter.next().unwrap(),
|
||||
0: iter.next().unwrap(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -47,4 +47,13 @@ fn main() {
|
|||
struct TupleStructVec(Vec<usize>);
|
||||
|
||||
let _ = TupleStructVec { 0: vec![0, 1, 2, 3] };
|
||||
|
||||
{
|
||||
struct S(i32, i32);
|
||||
let mut iter = [1i32, 1i32].into_iter();
|
||||
let _ = S {
|
||||
1: iter.next().unwrap(),
|
||||
0: iter.next().unwrap(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
error: used a field initializer for a tuple struct
|
||||
--> tests/ui/numbered_fields.rs:17:13
|
||||
--> tests/ui/init_numbered_fields.rs:17:13
|
||||
|
|
||||
LL | let _ = TupleStruct {
|
||||
| _____________^
|
||||
|
|
@ -7,13 +7,13 @@ LL | | 0: 1u32,
|
|||
LL | | 1: 42,
|
||||
LL | | 2: 23u8,
|
||||
LL | | };
|
||||
| |_____^ help: try: `TupleStruct(1u32, 42, 23u8)`
|
||||
| |_____^ help: use tuple initialization: `TupleStruct(1u32, 42, 23u8)`
|
||||
|
|
||||
= note: `-D clippy::init-numbered-fields` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::init_numbered_fields)]`
|
||||
|
||||
error: used a field initializer for a tuple struct
|
||||
--> tests/ui/numbered_fields.rs:24:13
|
||||
--> tests/ui/init_numbered_fields.rs:24:13
|
||||
|
|
||||
LL | let _ = TupleStruct {
|
||||
| _____________^
|
||||
|
|
@ -21,13 +21,13 @@ LL | | 0: 1u32,
|
|||
LL | | 2: 2u8,
|
||||
LL | | 1: 3u32,
|
||||
LL | | };
|
||||
| |_____^ help: try: `TupleStruct(1u32, 3u32, 2u8)`
|
||||
| |_____^ help: use tuple initialization: `TupleStruct(1u32, 3u32, 2u8)`
|
||||
|
||||
error: used a field initializer for a tuple struct
|
||||
--> tests/ui/numbered_fields.rs:49:13
|
||||
--> tests/ui/init_numbered_fields.rs:49:13
|
||||
|
|
||||
LL | let _ = TupleStructVec { 0: vec![0, 1, 2, 3] };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `TupleStructVec(vec![0, 1, 2, 3])`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use tuple initialization: `TupleStructVec(vec![0, 1, 2, 3])`
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
|
|
@ -185,3 +185,42 @@ pub mod issue11635 {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub mod issue12964 {
|
||||
pub struct MyIter<'a, T: 'a> {
|
||||
iter: std::slice::Iter<'a, T>,
|
||||
}
|
||||
|
||||
impl<'a, T> Iterator for MyIter<'a, T> {
|
||||
type Item = &'a T;
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
self.iter.next()
|
||||
}
|
||||
}
|
||||
|
||||
pub struct MyContainer<T> {
|
||||
inner: Vec<T>,
|
||||
}
|
||||
|
||||
impl<T> MyContainer<T> {}
|
||||
|
||||
impl<T> MyContainer<T> {
|
||||
#[must_use]
|
||||
pub fn iter(&self) -> MyIter<'_, T> {
|
||||
<&Self as IntoIterator>::into_iter(self)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T> IntoIterator for &'a MyContainer<T> {
|
||||
type Item = &'a T;
|
||||
|
||||
type IntoIter = MyIter<'a, T>;
|
||||
|
||||
fn into_iter(self) -> Self::IntoIter {
|
||||
Self::IntoIter {
|
||||
iter: self.inner.as_slice().iter(),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
fn main() {
|
||||
let x = [1, 2, 3, 4];
|
||||
for _ in vec.iter().next() {}
|
||||
for _ in x.iter().next() {}
|
||||
|
||||
struct Unrelated(&'static [u8]);
|
||||
impl Unrelated {
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
error[E0423]: expected value, found macro `vec`
|
||||
error: you are iterating over `Iterator::next()` which is an Option; this will compile but is probably not what you want
|
||||
--> tests/ui/iter_next_loop.rs:6:14
|
||||
|
|
||||
LL | for _ in vec.iter().next() {}
|
||||
| ^^^ not a value
|
||||
LL | for _ in x.iter().next() {}
|
||||
| ^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: `-D clippy::iter-next-loop` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::iter_next_loop)]`
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0423`.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
error:
|
||||
error: using `map` over `inspect`
|
||||
--> tests/ui/manual_inspect.rs:5:21
|
||||
|
|
||||
LL | let _ = Some(0).map(|x| {
|
||||
|
|
@ -12,7 +12,7 @@ LL ~ let _ = Some(0).inspect(|&x| {
|
|||
LL ~ println!("{}", x);
|
||||
|
|
||||
|
||||
error:
|
||||
error: using `map` over `inspect`
|
||||
--> tests/ui/manual_inspect.rs:10:21
|
||||
|
|
||||
LL | let _ = Some(0).map(|x| {
|
||||
|
|
@ -24,7 +24,7 @@ LL ~ let _ = Some(0).inspect(|&x| {
|
|||
LL ~ println!("{x}");
|
||||
|
|
||||
|
||||
error:
|
||||
error: using `map` over `inspect`
|
||||
--> tests/ui/manual_inspect.rs:15:21
|
||||
|
|
||||
LL | let _ = Some(0).map(|x| {
|
||||
|
|
@ -36,7 +36,7 @@ LL ~ let _ = Some(0).inspect(|&x| {
|
|||
LL ~ println!("{}", x * 5 + 1);
|
||||
|
|
||||
|
||||
error:
|
||||
error: using `map` over `inspect`
|
||||
--> tests/ui/manual_inspect.rs:20:21
|
||||
|
|
||||
LL | let _ = Some(0).map(|x| {
|
||||
|
|
@ -50,7 +50,7 @@ LL | panic!();
|
|||
LL ~ }
|
||||
|
|
||||
|
||||
error:
|
||||
error: using `map` over `inspect`
|
||||
--> tests/ui/manual_inspect.rs:27:21
|
||||
|
|
||||
LL | let _ = Some(0).map(|x| {
|
||||
|
|
@ -65,7 +65,7 @@ LL | panic!();
|
|||
LL ~ }
|
||||
|
|
||||
|
||||
error:
|
||||
error: using `map` over `inspect`
|
||||
--> tests/ui/manual_inspect.rs:78:41
|
||||
|
|
||||
LL | let _ = Some((String::new(), 0u32)).map(|x| {
|
||||
|
|
@ -80,7 +80,7 @@ LL | panic!();
|
|||
LL ~ }
|
||||
|
|
||||
|
||||
error:
|
||||
error: using `map` over `inspect`
|
||||
--> tests/ui/manual_inspect.rs:104:33
|
||||
|
|
||||
LL | let _ = Some(String::new()).map(|x| {
|
||||
|
|
@ -98,7 +98,7 @@ LL | }
|
|||
LL ~ println!("test");
|
||||
|
|
||||
|
||||
error:
|
||||
error: using `map` over `inspect`
|
||||
--> tests/ui/manual_inspect.rs:115:21
|
||||
|
|
||||
LL | let _ = Some(0).map(|x| {
|
||||
|
|
@ -113,7 +113,7 @@ LL | panic!();
|
|||
LL ~ }
|
||||
|
|
||||
|
||||
error:
|
||||
error: using `map` over `inspect`
|
||||
--> tests/ui/manual_inspect.rs:130:46
|
||||
|
|
||||
LL | let _ = Some(Cell2(Cell::new(0u32))).map(|x| {
|
||||
|
|
@ -125,7 +125,7 @@ LL ~ let _ = Some(Cell2(Cell::new(0u32))).inspect(|x| {
|
|||
LL ~ x.0.set(1);
|
||||
|
|
||||
|
||||
error:
|
||||
error: using `map` over `inspect`
|
||||
--> tests/ui/manual_inspect.rs:146:34
|
||||
|
|
||||
LL | let _: Result<_, ()> = Ok(0).map(|x| {
|
||||
|
|
@ -137,7 +137,7 @@ LL ~ let _: Result<_, ()> = Ok(0).inspect(|&x| {
|
|||
LL ~ println!("{}", x);
|
||||
|
|
||||
|
||||
error:
|
||||
error: using `map_err` over `inspect_err`
|
||||
--> tests/ui/manual_inspect.rs:151:35
|
||||
|
|
||||
LL | let _: Result<(), _> = Err(0).map_err(|x| {
|
||||
|
|
@ -166,7 +166,7 @@ LL | | .count();
|
|||
= note: `-D clippy::suspicious-map` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::suspicious_map)]`
|
||||
|
||||
error:
|
||||
error: using `map` over `inspect`
|
||||
--> tests/ui/manual_inspect.rs:158:10
|
||||
|
|
||||
LL | .map(|x| {
|
||||
|
|
|
|||
31
src/tools/clippy/tests/ui/manual_rotate.fixed
Normal file
31
src/tools/clippy/tests/ui/manual_rotate.fixed
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
#![warn(clippy::manual_rotate)]
|
||||
#![allow(unused)]
|
||||
fn main() {
|
||||
let (x_u8, x_u16, x_u32, x_u64) = (1u8, 1u16, 1u32, 1u64);
|
||||
let (x_i8, x_i16, x_i32, x_i64) = (1i8, 1i16, 1i32, 1i64);
|
||||
let a_u32 = 1u32;
|
||||
// True positives
|
||||
let y_u8 = x_u8.rotate_right(3);
|
||||
let y_u16 = x_u16.rotate_right(7);
|
||||
let y_u32 = x_u32.rotate_right(8);
|
||||
let y_u64 = x_u64.rotate_right(9);
|
||||
let y_i8 = x_i8.rotate_right(3);
|
||||
let y_i16 = x_i16.rotate_right(7);
|
||||
let y_i32 = x_i32.rotate_right(8);
|
||||
let y_i64 = x_i64.rotate_right(9);
|
||||
// Plus also works instead of |
|
||||
let y_u32_plus = x_u32.rotate_right(8);
|
||||
// Complex expression
|
||||
let y_u32_complex = (x_u32 | 3256).rotate_right(8);
|
||||
let y_u64_as = (x_u32 as u64).rotate_right(8);
|
||||
|
||||
// False positives - can't be replaced with a rotation
|
||||
let y_u8_false = (x_u8 >> 6) | (x_u8 << 3);
|
||||
let y_u32_false = (x_u32 >> 8) | (x_u32 >> 24);
|
||||
let y_u64_false2 = (x_u64 >> 9) & (x_u64 << 55);
|
||||
// Variable mismatch
|
||||
let y_u32_wrong_vars = (x_u32 >> 8) | (a_u32 << 24);
|
||||
// Has side effects and therefore should not be matched
|
||||
let mut l = vec![12_u8, 34];
|
||||
let y = (l.pop().unwrap() << 3) + (l.pop().unwrap() >> 5);
|
||||
}
|
||||
31
src/tools/clippy/tests/ui/manual_rotate.rs
Normal file
31
src/tools/clippy/tests/ui/manual_rotate.rs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
#![warn(clippy::manual_rotate)]
|
||||
#![allow(unused)]
|
||||
fn main() {
|
||||
let (x_u8, x_u16, x_u32, x_u64) = (1u8, 1u16, 1u32, 1u64);
|
||||
let (x_i8, x_i16, x_i32, x_i64) = (1i8, 1i16, 1i32, 1i64);
|
||||
let a_u32 = 1u32;
|
||||
// True positives
|
||||
let y_u8 = (x_u8 >> 3) | (x_u8 << 5);
|
||||
let y_u16 = (x_u16 >> 7) | (x_u16 << 9);
|
||||
let y_u32 = (x_u32 >> 8) | (x_u32 << 24);
|
||||
let y_u64 = (x_u64 >> 9) | (x_u64 << 55);
|
||||
let y_i8 = (x_i8 >> 3) | (x_i8 << 5);
|
||||
let y_i16 = (x_i16 >> 7) | (x_i16 << 9);
|
||||
let y_i32 = (x_i32 >> 8) | (x_i32 << 24);
|
||||
let y_i64 = (x_i64 >> 9) | (x_i64 << 55);
|
||||
// Plus also works instead of |
|
||||
let y_u32_plus = (x_u32 >> 8) + (x_u32 << 24);
|
||||
// Complex expression
|
||||
let y_u32_complex = ((x_u32 | 3256) >> 8) | ((x_u32 | 3256) << 24);
|
||||
let y_u64_as = (x_u32 as u64 >> 8) | ((x_u32 as u64) << 56);
|
||||
|
||||
// False positives - can't be replaced with a rotation
|
||||
let y_u8_false = (x_u8 >> 6) | (x_u8 << 3);
|
||||
let y_u32_false = (x_u32 >> 8) | (x_u32 >> 24);
|
||||
let y_u64_false2 = (x_u64 >> 9) & (x_u64 << 55);
|
||||
// Variable mismatch
|
||||
let y_u32_wrong_vars = (x_u32 >> 8) | (a_u32 << 24);
|
||||
// Has side effects and therefore should not be matched
|
||||
let mut l = vec![12_u8, 34];
|
||||
let y = (l.pop().unwrap() << 3) + (l.pop().unwrap() >> 5);
|
||||
}
|
||||
71
src/tools/clippy/tests/ui/manual_rotate.stderr
Normal file
71
src/tools/clippy/tests/ui/manual_rotate.stderr
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
error: there is no need to manually implement bit rotation
|
||||
--> tests/ui/manual_rotate.rs:8:16
|
||||
|
|
||||
LL | let y_u8 = (x_u8 >> 3) | (x_u8 << 5);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: this expression can be rewritten as: `x_u8.rotate_right(3)`
|
||||
|
|
||||
= note: `-D clippy::manual-rotate` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::manual_rotate)]`
|
||||
|
||||
error: there is no need to manually implement bit rotation
|
||||
--> tests/ui/manual_rotate.rs:9:17
|
||||
|
|
||||
LL | let y_u16 = (x_u16 >> 7) | (x_u16 << 9);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: this expression can be rewritten as: `x_u16.rotate_right(7)`
|
||||
|
||||
error: there is no need to manually implement bit rotation
|
||||
--> tests/ui/manual_rotate.rs:10:17
|
||||
|
|
||||
LL | let y_u32 = (x_u32 >> 8) | (x_u32 << 24);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: this expression can be rewritten as: `x_u32.rotate_right(8)`
|
||||
|
||||
error: there is no need to manually implement bit rotation
|
||||
--> tests/ui/manual_rotate.rs:11:17
|
||||
|
|
||||
LL | let y_u64 = (x_u64 >> 9) | (x_u64 << 55);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: this expression can be rewritten as: `x_u64.rotate_right(9)`
|
||||
|
||||
error: there is no need to manually implement bit rotation
|
||||
--> tests/ui/manual_rotate.rs:12:16
|
||||
|
|
||||
LL | let y_i8 = (x_i8 >> 3) | (x_i8 << 5);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: this expression can be rewritten as: `x_i8.rotate_right(3)`
|
||||
|
||||
error: there is no need to manually implement bit rotation
|
||||
--> tests/ui/manual_rotate.rs:13:17
|
||||
|
|
||||
LL | let y_i16 = (x_i16 >> 7) | (x_i16 << 9);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: this expression can be rewritten as: `x_i16.rotate_right(7)`
|
||||
|
||||
error: there is no need to manually implement bit rotation
|
||||
--> tests/ui/manual_rotate.rs:14:17
|
||||
|
|
||||
LL | let y_i32 = (x_i32 >> 8) | (x_i32 << 24);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: this expression can be rewritten as: `x_i32.rotate_right(8)`
|
||||
|
||||
error: there is no need to manually implement bit rotation
|
||||
--> tests/ui/manual_rotate.rs:15:17
|
||||
|
|
||||
LL | let y_i64 = (x_i64 >> 9) | (x_i64 << 55);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: this expression can be rewritten as: `x_i64.rotate_right(9)`
|
||||
|
||||
error: there is no need to manually implement bit rotation
|
||||
--> tests/ui/manual_rotate.rs:17:22
|
||||
|
|
||||
LL | let y_u32_plus = (x_u32 >> 8) + (x_u32 << 24);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: this expression can be rewritten as: `x_u32.rotate_right(8)`
|
||||
|
||||
error: there is no need to manually implement bit rotation
|
||||
--> tests/ui/manual_rotate.rs:19:25
|
||||
|
|
||||
LL | let y_u32_complex = ((x_u32 | 3256) >> 8) | ((x_u32 | 3256) << 24);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: this expression can be rewritten as: `(x_u32 | 3256).rotate_right(8)`
|
||||
|
||||
error: there is no need to manually implement bit rotation
|
||||
--> tests/ui/manual_rotate.rs:20:20
|
||||
|
|
||||
LL | let y_u64_as = (x_u32 as u64 >> 8) | ((x_u32 as u64) << 56);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: this expression can be rewritten as: `(x_u32 as u64).rotate_right(8)`
|
||||
|
||||
error: aborting due to 11 previous errors
|
||||
|
||||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#![warn(clippy::missing_const_for_fn)]
|
||||
#![feature(start)]
|
||||
#![feature(type_alias_impl_trait)]
|
||||
|
||||
extern crate helper;
|
||||
extern crate proc_macros;
|
||||
|
|
@ -180,4 +181,21 @@ mod msrv {
|
|||
unsafe { *self.1 as usize }
|
||||
}
|
||||
}
|
||||
|
||||
#[clippy::msrv = "1.61"]
|
||||
extern "C" fn c() {}
|
||||
}
|
||||
|
||||
mod with_extern {
|
||||
extern "C-unwind" fn c_unwind() {}
|
||||
extern "system" fn system() {}
|
||||
extern "system-unwind" fn system_unwind() {}
|
||||
}
|
||||
|
||||
mod with_ty_alias {
|
||||
type Foo = impl std::fmt::Debug;
|
||||
|
||||
fn foo(_: Foo) {
|
||||
let _: Foo = 1;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -143,6 +143,21 @@ mod msrv {
|
|||
let bar = Bar { val: 1 };
|
||||
let _ = unsafe { bar.val };
|
||||
}
|
||||
|
||||
#[clippy::msrv = "1.62"]
|
||||
mod with_extern {
|
||||
const extern "C" fn c() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
|
||||
#[rustfmt::skip]
|
||||
const extern fn implicit_c() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
|
||||
// any item functions in extern block won't trigger this lint
|
||||
extern "C" {
|
||||
fn c_in_block();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod issue12677 {
|
||||
|
|
@ -174,3 +189,18 @@ mod issue12677 {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod with_ty_alias {
|
||||
trait FooTrait {
|
||||
type Foo: std::fmt::Debug;
|
||||
fn bar(_: Self::Foo) {}
|
||||
}
|
||||
impl FooTrait for () {
|
||||
type Foo = i32;
|
||||
}
|
||||
// NOTE: When checking the type of a function param, make sure it is not an alias with
|
||||
// `AliasTyKind::Projection` before calling `TyCtxt::type_of` to find out what the actual type
|
||||
// is. Because the associate ty could have no default, therefore would cause ICE, as demostrated
|
||||
// in this test.
|
||||
const fn alias_ty_is_projection(bar: <() as FooTrait>::Foo) {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -143,6 +143,21 @@ mod msrv {
|
|||
let bar = Bar { val: 1 };
|
||||
let _ = unsafe { bar.val };
|
||||
}
|
||||
|
||||
#[clippy::msrv = "1.62"]
|
||||
mod with_extern {
|
||||
extern "C" fn c() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
|
||||
#[rustfmt::skip]
|
||||
extern fn implicit_c() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
|
||||
// any item functions in extern block won't trigger this lint
|
||||
extern "C" {
|
||||
fn c_in_block();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod issue12677 {
|
||||
|
|
@ -174,3 +189,18 @@ mod issue12677 {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
mod with_ty_alias {
|
||||
trait FooTrait {
|
||||
type Foo: std::fmt::Debug;
|
||||
fn bar(_: Self::Foo) {}
|
||||
}
|
||||
impl FooTrait for () {
|
||||
type Foo = i32;
|
||||
}
|
||||
// NOTE: When checking the type of a function param, make sure it is not an alias with
|
||||
// `AliasTyKind::Projection` before calling `TyCtxt::type_of` to find out what the actual type
|
||||
// is. Because the associate ty could have no default, therefore would cause ICE, as demostrated
|
||||
// in this test.
|
||||
fn alias_ty_is_projection(bar: <() as FooTrait>::Foo) {}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -211,7 +211,29 @@ LL | const fn union_access_can_be_const() {
|
|||
| +++++
|
||||
|
||||
error: this could be a `const fn`
|
||||
--> tests/ui/missing_const_for_fn/could_be_const.rs:155:9
|
||||
--> tests/ui/missing_const_for_fn/could_be_const.rs:149:9
|
||||
|
|
||||
LL | extern "C" fn c() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: make the function `const`
|
||||
|
|
||||
LL | const extern "C" fn c() {}
|
||||
| +++++
|
||||
|
||||
error: this could be a `const fn`
|
||||
--> tests/ui/missing_const_for_fn/could_be_const.rs:153:9
|
||||
|
|
||||
LL | extern fn implicit_c() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: make the function `const`
|
||||
|
|
||||
LL | const extern fn implicit_c() {}
|
||||
| +++++
|
||||
|
||||
error: this could be a `const fn`
|
||||
--> tests/ui/missing_const_for_fn/could_be_const.rs:170:9
|
||||
|
|
||||
LL | / pub fn new(strings: Vec<String>) -> Self {
|
||||
LL | | Self { strings }
|
||||
|
|
@ -224,7 +246,7 @@ LL | pub const fn new(strings: Vec<String>) -> Self {
|
|||
| +++++
|
||||
|
||||
error: this could be a `const fn`
|
||||
--> tests/ui/missing_const_for_fn/could_be_const.rs:160:9
|
||||
--> tests/ui/missing_const_for_fn/could_be_const.rs:175:9
|
||||
|
|
||||
LL | / pub fn empty() -> Self {
|
||||
LL | | Self { strings: Vec::new() }
|
||||
|
|
@ -237,7 +259,7 @@ LL | pub const fn empty() -> Self {
|
|||
| +++++
|
||||
|
||||
error: this could be a `const fn`
|
||||
--> tests/ui/missing_const_for_fn/could_be_const.rs:171:9
|
||||
--> tests/ui/missing_const_for_fn/could_be_const.rs:186:9
|
||||
|
|
||||
LL | / pub fn new(text: String) -> Self {
|
||||
LL | | let vec = Vec::new();
|
||||
|
|
@ -250,5 +272,16 @@ help: make the function `const`
|
|||
LL | pub const fn new(text: String) -> Self {
|
||||
| +++++
|
||||
|
||||
error: aborting due to 18 previous errors
|
||||
error: this could be a `const fn`
|
||||
--> tests/ui/missing_const_for_fn/could_be_const.rs:205:5
|
||||
|
|
||||
LL | fn alias_ty_is_projection(bar: <() as FooTrait>::Foo) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: make the function `const`
|
||||
|
|
||||
LL | const fn alias_ty_is_projection(bar: <() as FooTrait>::Foo) {}
|
||||
| +++++
|
||||
|
||||
error: aborting due to 21 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
#![warn(clippy::missing_const_for_fn)]
|
||||
#![allow(unsupported_calling_conventions)]
|
||||
#![feature(const_extern_fn)]
|
||||
|
||||
const extern "C-unwind" fn c_unwind() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
const extern "system" fn system() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
const extern "system-unwind" fn system_unwind() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
pub const extern "stdcall" fn std_call() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
pub const extern "stdcall-unwind" fn std_call_unwind() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
#![warn(clippy::missing_const_for_fn)]
|
||||
#![allow(unsupported_calling_conventions)]
|
||||
#![feature(const_extern_fn)]
|
||||
|
||||
extern "C-unwind" fn c_unwind() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
extern "system" fn system() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
extern "system-unwind" fn system_unwind() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
pub extern "stdcall" fn std_call() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
pub extern "stdcall-unwind" fn std_call_unwind() {}
|
||||
//~^ ERROR: this could be a `const fn`
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
error: this could be a `const fn`
|
||||
--> tests/ui/missing_const_for_fn/could_be_const_with_const_extern_fn.rs:5:1
|
||||
|
|
||||
LL | extern "C-unwind" fn c_unwind() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: `-D clippy::missing-const-for-fn` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::missing_const_for_fn)]`
|
||||
help: make the function `const`
|
||||
|
|
||||
LL | const extern "C-unwind" fn c_unwind() {}
|
||||
| +++++
|
||||
|
||||
error: this could be a `const fn`
|
||||
--> tests/ui/missing_const_for_fn/could_be_const_with_const_extern_fn.rs:7:1
|
||||
|
|
||||
LL | extern "system" fn system() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: make the function `const`
|
||||
|
|
||||
LL | const extern "system" fn system() {}
|
||||
| +++++
|
||||
|
||||
error: this could be a `const fn`
|
||||
--> tests/ui/missing_const_for_fn/could_be_const_with_const_extern_fn.rs:9:1
|
||||
|
|
||||
LL | extern "system-unwind" fn system_unwind() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: make the function `const`
|
||||
|
|
||||
LL | const extern "system-unwind" fn system_unwind() {}
|
||||
| +++++
|
||||
|
||||
error: this could be a `const fn`
|
||||
--> tests/ui/missing_const_for_fn/could_be_const_with_const_extern_fn.rs:11:1
|
||||
|
|
||||
LL | pub extern "stdcall" fn std_call() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: make the function `const`
|
||||
|
|
||||
LL | pub const extern "stdcall" fn std_call() {}
|
||||
| +++++
|
||||
|
||||
error: this could be a `const fn`
|
||||
--> tests/ui/missing_const_for_fn/could_be_const_with_const_extern_fn.rs:13:1
|
||||
|
|
||||
LL | pub extern "stdcall-unwind" fn std_call_unwind() {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: make the function `const`
|
||||
|
|
||||
LL | pub const extern "stdcall-unwind" fn std_call_unwind() {}
|
||||
| +++++
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#![warn(clippy::thread_local_initializer_can_be_made_const)]
|
||||
#![warn(clippy::missing_const_for_thread_local)]
|
||||
|
||||
use std::cell::{Cell, RefCell};
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#![warn(clippy::thread_local_initializer_can_be_made_const)]
|
||||
#![warn(clippy::missing_const_for_thread_local)]
|
||||
|
||||
use std::cell::{Cell, RefCell};
|
||||
|
||||
|
|
@ -1,38 +1,38 @@
|
|||
error: initializer for `thread_local` value can be made `const`
|
||||
--> tests/ui/thread_local_initializer_can_be_made_const.rs:8:41
|
||||
--> tests/ui/missing_const_for_thread_local.rs:8:41
|
||||
|
|
||||
LL | static BUF_1: RefCell<String> = RefCell::new(String::new());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `const { RefCell::new(String::new()) }`
|
||||
|
|
||||
= note: `-D clippy::thread-local-initializer-can-be-made-const` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::thread_local_initializer_can_be_made_const)]`
|
||||
= note: `-D clippy::missing-const-for-thread-local` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::missing_const_for_thread_local)]`
|
||||
|
||||
error: initializer for `thread_local` value can be made `const`
|
||||
--> tests/ui/thread_local_initializer_can_be_made_const.rs:18:29
|
||||
--> tests/ui/missing_const_for_thread_local.rs:18:29
|
||||
|
|
||||
LL | static SIMPLE:i32 = 1;
|
||||
| ^ help: replace with: `const { 1 }`
|
||||
|
||||
error: initializer for `thread_local` value can be made `const`
|
||||
--> tests/ui/thread_local_initializer_can_be_made_const.rs:24:59
|
||||
--> tests/ui/missing_const_for_thread_local.rs:24:59
|
||||
|
|
||||
LL | static BUF_3_CAN_BE_MADE_CONST: RefCell<String> = RefCell::new(String::new());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `const { RefCell::new(String::new()) }`
|
||||
|
||||
error: initializer for `thread_local` value can be made `const`
|
||||
--> tests/ui/thread_local_initializer_can_be_made_const.rs:26:59
|
||||
--> tests/ui/missing_const_for_thread_local.rs:26:59
|
||||
|
|
||||
LL | static BUF_4_CAN_BE_MADE_CONST: RefCell<String> = RefCell::new(String::new());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace with: `const { RefCell::new(String::new()) }`
|
||||
|
||||
error: initializer for `thread_local` value can be made `const`
|
||||
--> tests/ui/thread_local_initializer_can_be_made_const.rs:32:31
|
||||
--> tests/ui/missing_const_for_thread_local.rs:32:31
|
||||
|
|
||||
LL | static PEEL_ME: i32 = { 1 };
|
||||
| ^^^^^ help: replace with: `const { 1 }`
|
||||
|
||||
error: initializer for `thread_local` value can be made `const`
|
||||
--> tests/ui/thread_local_initializer_can_be_made_const.rs:34:36
|
||||
--> tests/ui/missing_const_for_thread_local.rs:34:36
|
||||
|
|
||||
LL | static PEEL_ME_MANY: i32 = { let x = 1; x * x };
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: replace with: `const { { let x = 1; x * x } }`
|
||||
|
|
@ -232,43 +232,48 @@ async fn async_vec2(b: &mut Vec<bool>) {
|
|||
}
|
||||
fn non_mut(n: &str) {}
|
||||
//Should warn
|
||||
pub async fn call_in_closure1(n: &mut str) {
|
||||
async fn call_in_closure1(n: &mut str) {
|
||||
(|| non_mut(n))()
|
||||
}
|
||||
fn str_mut(str: &mut String) -> bool {
|
||||
str.pop().is_some()
|
||||
}
|
||||
//Should not warn
|
||||
pub async fn call_in_closure2(str: &mut String) {
|
||||
async fn call_in_closure2(str: &mut String) {
|
||||
(|| str_mut(str))();
|
||||
}
|
||||
|
||||
// Should not warn.
|
||||
pub async fn closure(n: &mut usize) -> impl '_ + FnMut() {
|
||||
async fn closure(n: &mut usize) -> impl '_ + FnMut() {
|
||||
|| {
|
||||
*n += 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Should warn.
|
||||
pub fn closure2(n: &mut usize) -> impl '_ + FnMut() -> usize {
|
||||
fn closure2(n: &mut usize) -> impl '_ + FnMut() -> usize {
|
||||
//~^ ERROR: this argument is a mutable reference, but not used mutably
|
||||
|| *n + 1
|
||||
}
|
||||
|
||||
// Should not warn.
|
||||
pub async fn closure3(n: &mut usize) {
|
||||
async fn closure3(n: &mut usize) {
|
||||
(|| *n += 1)();
|
||||
}
|
||||
|
||||
// Should warn.
|
||||
pub async fn closure4(n: &mut usize) {
|
||||
async fn closure4(n: &mut usize) {
|
||||
//~^ ERROR: this argument is a mutable reference, but not used mutably
|
||||
(|| {
|
||||
let _x = *n + 1;
|
||||
})();
|
||||
}
|
||||
|
||||
// Should not warn: pub
|
||||
pub fn pub_foo(s: &mut Vec<u32>, b: &u32, x: &mut u32) {
|
||||
*x += *b + s.len() as u32;
|
||||
}
|
||||
|
||||
// Should not warn.
|
||||
async fn _f(v: &mut Vec<()>) {
|
||||
let x = || v.pop();
|
||||
|
|
@ -365,4 +370,5 @@ fn main() {
|
|||
used_as_path;
|
||||
let _: fn(&mut u32) = passed_as_local;
|
||||
let _ = if v[0] == 0 { ty_unify_1 } else { ty_unify_2 };
|
||||
pub_foo(&mut v, &0, &mut u);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -108,109 +108,103 @@ LL | async fn inner_async3(x: &mut i32, y: &mut u32) {
|
|||
| ^^^^^^^^ help: consider changing to: `&i32`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:235:34
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:235:30
|
||||
|
|
||||
LL | pub async fn call_in_closure1(n: &mut str) {
|
||||
| ^^^^^^^^ help: consider changing to: `&str`
|
||||
|
|
||||
= warning: changing this function will impact semver compatibility
|
||||
LL | async fn call_in_closure1(n: &mut str) {
|
||||
| ^^^^^^^^ help: consider changing to: `&str`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:254:20
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:254:16
|
||||
|
|
||||
LL | pub fn closure2(n: &mut usize) -> impl '_ + FnMut() -> usize {
|
||||
| ^^^^^^^^^^ help: consider changing to: `&usize`
|
||||
|
|
||||
= warning: changing this function will impact semver compatibility
|
||||
LL | fn closure2(n: &mut usize) -> impl '_ + FnMut() -> usize {
|
||||
| ^^^^^^^^^^ help: consider changing to: `&usize`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:265:26
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:265:22
|
||||
|
|
||||
LL | pub async fn closure4(n: &mut usize) {
|
||||
| ^^^^^^^^^^ help: consider changing to: `&usize`
|
||||
|
|
||||
= warning: changing this function will impact semver compatibility
|
||||
LL | async fn closure4(n: &mut usize) {
|
||||
| ^^^^^^^^^^ help: consider changing to: `&usize`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:314:12
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:319:12
|
||||
|
|
||||
LL | fn bar(&mut self) {}
|
||||
| ^^^^^^^^^ help: consider changing to: `&self`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:316:18
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:321:18
|
||||
|
|
||||
LL | async fn foo(&mut self, u: &mut i32, v: &mut u32) {
|
||||
| ^^^^^^^^^ help: consider changing to: `&self`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:316:45
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:321:45
|
||||
|
|
||||
LL | async fn foo(&mut self, u: &mut i32, v: &mut u32) {
|
||||
| ^^^^^^^^ help: consider changing to: `&u32`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:324:46
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:329:46
|
||||
|
|
||||
LL | async fn foo2(&mut self, u: &mut i32, v: &mut u32) {
|
||||
| ^^^^^^^^ help: consider changing to: `&u32`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:340:18
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:345:18
|
||||
|
|
||||
LL | fn _empty_tup(x: &mut (())) {}
|
||||
| ^^^^^^^^^ help: consider changing to: `&()`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:341:19
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:346:19
|
||||
|
|
||||
LL | fn _single_tup(x: &mut ((i32,))) {}
|
||||
| ^^^^^^^^^^^^^ help: consider changing to: `&(i32,)`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:342:18
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:347:18
|
||||
|
|
||||
LL | fn _multi_tup(x: &mut ((i32, u32))) {}
|
||||
| ^^^^^^^^^^^^^^^^^ help: consider changing to: `&(i32, u32)`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:343:11
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:348:11
|
||||
|
|
||||
LL | fn _fn(x: &mut (fn())) {}
|
||||
| ^^^^^^^^^^^ help: consider changing to: `&fn()`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:345:23
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:350:23
|
||||
|
|
||||
LL | fn _extern_rust_fn(x: &mut extern "Rust" fn()) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing to: `&extern "Rust" fn()`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:346:20
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:351:20
|
||||
|
|
||||
LL | fn _extern_c_fn(x: &mut extern "C" fn()) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: consider changing to: `&extern "C" fn()`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:347:18
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:352:18
|
||||
|
|
||||
LL | fn _unsafe_fn(x: &mut unsafe fn()) {}
|
||||
| ^^^^^^^^^^^^^^^^ help: consider changing to: `&unsafe fn()`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:348:25
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:353:25
|
||||
|
|
||||
LL | fn _unsafe_extern_fn(x: &mut unsafe extern "C" fn()) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing to: `&unsafe extern "C" fn()`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:349:20
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:354:20
|
||||
|
|
||||
LL | fn _fn_with_arg(x: &mut unsafe extern "C" fn(i32)) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing to: `&unsafe extern "C" fn(i32)`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:350:20
|
||||
--> tests/ui/needless_pass_by_ref_mut.rs:355:20
|
||||
|
|
||||
LL | fn _fn_with_ret(x: &mut unsafe extern "C" fn() -> (i32)) {}
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing to: `&unsafe extern "C" fn() -> (i32)`
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
#![allow(clippy::redundant_closure_call)]
|
||||
#![warn(clippy::needless_pass_by_ref_mut)]
|
||||
|
||||
pub async fn inner_async3(x: &i32, y: &mut u32) {
|
||||
async fn inner_async3(x: &i32, y: &mut u32) {
|
||||
//~^ ERROR: this argument is a mutable reference, but not used mutably
|
||||
async {
|
||||
*y += 1;
|
||||
|
|
@ -13,7 +13,7 @@ pub async fn inner_async3(x: &i32, y: &mut u32) {
|
|||
.await;
|
||||
}
|
||||
|
||||
pub async fn inner_async4(u: &mut i32, v: &u32) {
|
||||
async fn inner_async4(u: &mut i32, v: &u32) {
|
||||
//~^ ERROR: this argument is a mutable reference, but not used mutably
|
||||
async {
|
||||
*u += 1;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
#![allow(clippy::redundant_closure_call)]
|
||||
#![warn(clippy::needless_pass_by_ref_mut)]
|
||||
|
||||
pub async fn inner_async3(x: &mut i32, y: &mut u32) {
|
||||
async fn inner_async3(x: &mut i32, y: &mut u32) {
|
||||
//~^ ERROR: this argument is a mutable reference, but not used mutably
|
||||
async {
|
||||
*y += 1;
|
||||
|
|
@ -13,7 +13,7 @@ pub async fn inner_async3(x: &mut i32, y: &mut u32) {
|
|||
.await;
|
||||
}
|
||||
|
||||
pub async fn inner_async4(u: &mut i32, v: &mut u32) {
|
||||
async fn inner_async4(u: &mut i32, v: &mut u32) {
|
||||
//~^ ERROR: this argument is a mutable reference, but not used mutably
|
||||
async {
|
||||
*u += 1;
|
||||
|
|
|
|||
|
|
@ -1,20 +1,17 @@
|
|||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut2.rs:8:30
|
||||
--> tests/ui/needless_pass_by_ref_mut2.rs:8:26
|
||||
|
|
||||
LL | pub async fn inner_async3(x: &mut i32, y: &mut u32) {
|
||||
| ^^^^^^^^ help: consider changing to: `&i32`
|
||||
LL | async fn inner_async3(x: &mut i32, y: &mut u32) {
|
||||
| ^^^^^^^^ help: consider changing to: `&i32`
|
||||
|
|
||||
= warning: changing this function will impact semver compatibility
|
||||
= note: `-D clippy::needless-pass-by-ref-mut` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::needless_pass_by_ref_mut)]`
|
||||
|
||||
error: this argument is a mutable reference, but not used mutably
|
||||
--> tests/ui/needless_pass_by_ref_mut2.rs:16:43
|
||||
--> tests/ui/needless_pass_by_ref_mut2.rs:16:39
|
||||
|
|
||||
LL | pub async fn inner_async4(u: &mut i32, v: &mut u32) {
|
||||
| ^^^^^^^^ help: consider changing to: `&u32`
|
||||
|
|
||||
= warning: changing this function will impact semver compatibility
|
||||
LL | async fn inner_async4(u: &mut i32, v: &mut u32) {
|
||||
| ^^^^^^^^ help: consider changing to: `&u32`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -228,12 +228,41 @@ fn needless_return_macro() -> String {
|
|||
format!("Hello {}", "world!")
|
||||
}
|
||||
|
||||
fn issue_9361() -> i32 {
|
||||
let n = 1;
|
||||
#[allow(clippy::arithmetic_side_effects)]
|
||||
fn issue_9361(n: i32) -> i32 {
|
||||
#[expect(clippy::arithmetic_side_effects)]
|
||||
return n + n;
|
||||
}
|
||||
|
||||
mod issue_12998 {
|
||||
fn expect_lint() -> i32 {
|
||||
let x = 1;
|
||||
|
||||
#[expect(clippy::needless_return)]
|
||||
return x;
|
||||
}
|
||||
|
||||
fn expect_group() -> i32 {
|
||||
let x = 1;
|
||||
|
||||
#[expect(clippy::style)]
|
||||
return x;
|
||||
}
|
||||
|
||||
fn expect_all() -> i32 {
|
||||
let x = 1;
|
||||
|
||||
#[expect(clippy::all)]
|
||||
return x;
|
||||
}
|
||||
|
||||
fn expect_warnings() -> i32 {
|
||||
let x = 1;
|
||||
|
||||
#[expect(warnings)]
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
fn issue8336(x: i32) -> bool {
|
||||
if x > 0 {
|
||||
println!("something");
|
||||
|
|
|
|||
|
|
@ -236,12 +236,41 @@ fn needless_return_macro() -> String {
|
|||
return format!("Hello {}", "world!");
|
||||
}
|
||||
|
||||
fn issue_9361() -> i32 {
|
||||
let n = 1;
|
||||
#[allow(clippy::arithmetic_side_effects)]
|
||||
fn issue_9361(n: i32) -> i32 {
|
||||
#[expect(clippy::arithmetic_side_effects)]
|
||||
return n + n;
|
||||
}
|
||||
|
||||
mod issue_12998 {
|
||||
fn expect_lint() -> i32 {
|
||||
let x = 1;
|
||||
|
||||
#[expect(clippy::needless_return)]
|
||||
return x;
|
||||
}
|
||||
|
||||
fn expect_group() -> i32 {
|
||||
let x = 1;
|
||||
|
||||
#[expect(clippy::style)]
|
||||
return x;
|
||||
}
|
||||
|
||||
fn expect_all() -> i32 {
|
||||
let x = 1;
|
||||
|
||||
#[expect(clippy::all)]
|
||||
return x;
|
||||
}
|
||||
|
||||
fn expect_warnings() -> i32 {
|
||||
let x = 1;
|
||||
|
||||
#[expect(warnings)]
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
fn issue8336(x: i32) -> bool {
|
||||
if x > 0 {
|
||||
println!("something");
|
||||
|
|
|
|||
|
|
@ -483,7 +483,7 @@ LL + format!("Hello {}", "world!")
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:248:9
|
||||
--> tests/ui/needless_return.rs:277:9
|
||||
|
|
||||
LL | return true;
|
||||
| ^^^^^^^^^^^
|
||||
|
|
@ -497,7 +497,7 @@ LL ~ }
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:250:9
|
||||
--> tests/ui/needless_return.rs:279:9
|
||||
|
|
||||
LL | return false;
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
@ -509,7 +509,7 @@ LL ~ }
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:257:13
|
||||
--> tests/ui/needless_return.rs:286:13
|
||||
|
|
||||
LL | return 10;
|
||||
| ^^^^^^^^^
|
||||
|
|
@ -524,7 +524,7 @@ LL ~ }
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:260:13
|
||||
--> tests/ui/needless_return.rs:289:13
|
||||
|
|
||||
LL | return 100;
|
||||
| ^^^^^^^^^^
|
||||
|
|
@ -537,7 +537,7 @@ LL ~ }
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:268:9
|
||||
--> tests/ui/needless_return.rs:297:9
|
||||
|
|
||||
LL | return 0;
|
||||
| ^^^^^^^^
|
||||
|
|
@ -549,7 +549,7 @@ LL ~ }
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:275:13
|
||||
--> tests/ui/needless_return.rs:304:13
|
||||
|
|
||||
LL | return *(x as *const isize);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -564,7 +564,7 @@ LL ~ }
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:277:13
|
||||
--> tests/ui/needless_return.rs:306:13
|
||||
|
|
||||
LL | return !*(x as *const isize);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -577,7 +577,7 @@ LL ~ }
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:284:20
|
||||
--> tests/ui/needless_return.rs:313:20
|
||||
|
|
||||
LL | let _ = 42;
|
||||
| ____________________^
|
||||
|
|
@ -594,7 +594,7 @@ LL + let _ = 42;
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:291:20
|
||||
--> tests/ui/needless_return.rs:320:20
|
||||
|
|
||||
LL | let _ = 42; return;
|
||||
| ^^^^^^^
|
||||
|
|
@ -606,7 +606,7 @@ LL + let _ = 42;
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:303:9
|
||||
--> tests/ui/needless_return.rs:332:9
|
||||
|
|
||||
LL | return Ok(format!("ok!"));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -618,7 +618,7 @@ LL + Ok(format!("ok!"))
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:305:9
|
||||
--> tests/ui/needless_return.rs:334:9
|
||||
|
|
||||
LL | return Err(format!("err!"));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -630,7 +630,7 @@ LL + Err(format!("err!"))
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:311:9
|
||||
--> tests/ui/needless_return.rs:340:9
|
||||
|
|
||||
LL | return if true { 1 } else { 2 };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -642,7 +642,7 @@ LL + if true { 1 } else { 2 }
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:315:9
|
||||
--> tests/ui/needless_return.rs:344:9
|
||||
|
|
||||
LL | return if b1 { 0 } else { 1 } | if b2 { 2 } else { 3 } | if b3 { 4 } else { 5 };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -654,7 +654,7 @@ LL + (if b1 { 0 } else { 1 } | if b2 { 2 } else { 3 } | if b3 { 4 } else
|
|||
|
|
||||
|
||||
error: unneeded `return` statement
|
||||
--> tests/ui/needless_return.rs:336:5
|
||||
--> tests/ui/needless_return.rs:365:5
|
||||
|
|
||||
LL | return { "a".to_string() } + "b" + { "c" };
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
|
|||
|
|
@ -1,36 +0,0 @@
|
|||
#![warn(clippy::overflow_check_conditional)]
|
||||
#![allow(clippy::needless_if)]
|
||||
|
||||
fn test(a: u32, b: u32, c: u32) {
|
||||
if a + b < a {}
|
||||
//~^ ERROR: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
//~| NOTE: `-D clippy::overflow-check-conditional` implied by `-D warnings`
|
||||
if a > a + b {}
|
||||
//~^ ERROR: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
if a + b < b {}
|
||||
//~^ ERROR: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
if b > a + b {}
|
||||
//~^ ERROR: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
if a - b > b {}
|
||||
//~^ ERROR: you are trying to use classic C underflow conditions that will fail in Rus
|
||||
if b < a - b {}
|
||||
//~^ ERROR: you are trying to use classic C underflow conditions that will fail in Rus
|
||||
if a - b > a {}
|
||||
//~^ ERROR: you are trying to use classic C underflow conditions that will fail in Rus
|
||||
if a < a - b {}
|
||||
//~^ ERROR: you are trying to use classic C underflow conditions that will fail in Rus
|
||||
if a + b < c {}
|
||||
if c > a + b {}
|
||||
if a - b < c {}
|
||||
if c > a - b {}
|
||||
let i = 1.1;
|
||||
let j = 2.2;
|
||||
if i + j < i {}
|
||||
if i - j < i {}
|
||||
if i > i + j {}
|
||||
if i - j < i {}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
test(1, 2, 3)
|
||||
}
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
error: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
--> tests/ui/overflow_check_conditional.rs:5:8
|
||||
|
|
||||
LL | if a + b < a {}
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: `-D clippy::overflow-check-conditional` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::overflow_check_conditional)]`
|
||||
|
||||
error: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
--> tests/ui/overflow_check_conditional.rs:8:8
|
||||
|
|
||||
LL | if a > a + b {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
--> tests/ui/overflow_check_conditional.rs:10:8
|
||||
|
|
||||
LL | if a + b < b {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
--> tests/ui/overflow_check_conditional.rs:12:8
|
||||
|
|
||||
LL | if b > a + b {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: you are trying to use classic C underflow conditions that will fail in Rust
|
||||
--> tests/ui/overflow_check_conditional.rs:14:8
|
||||
|
|
||||
LL | if a - b > b {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: you are trying to use classic C underflow conditions that will fail in Rust
|
||||
--> tests/ui/overflow_check_conditional.rs:16:8
|
||||
|
|
||||
LL | if b < a - b {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: you are trying to use classic C underflow conditions that will fail in Rust
|
||||
--> tests/ui/overflow_check_conditional.rs:18:8
|
||||
|
|
||||
LL | if a - b > a {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: you are trying to use classic C underflow conditions that will fail in Rust
|
||||
--> tests/ui/overflow_check_conditional.rs:20:8
|
||||
|
|
||||
LL | if a < a - b {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: aborting due to 8 previous errors
|
||||
|
||||
27
src/tools/clippy/tests/ui/panicking_overflow_checks.rs
Normal file
27
src/tools/clippy/tests/ui/panicking_overflow_checks.rs
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
#![warn(clippy::panicking_overflow_checks)]
|
||||
#![allow(clippy::needless_if)]
|
||||
|
||||
fn test(a: u32, b: u32, c: u32) {
|
||||
if a + b < a {} //~ panicking_overflow_checks
|
||||
if a > a + b {} //~ panicking_overflow_checks
|
||||
if a + b < b {} //~ panicking_overflow_checks
|
||||
if b > a + b {} //~ panicking_overflow_checks
|
||||
if a - b > b {}
|
||||
if b < a - b {}
|
||||
if a - b > a {} //~ panicking_overflow_checks
|
||||
if a < a - b {} //~ panicking_overflow_checks
|
||||
if a + b < c {}
|
||||
if c > a + b {}
|
||||
if a - b < c {}
|
||||
if c > a - b {}
|
||||
let i = 1.1;
|
||||
let j = 2.2;
|
||||
if i + j < i {}
|
||||
if i - j < i {}
|
||||
if i > i + j {}
|
||||
if i - j < i {}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
test(1, 2, 3)
|
||||
}
|
||||
41
src/tools/clippy/tests/ui/panicking_overflow_checks.stderr
Normal file
41
src/tools/clippy/tests/ui/panicking_overflow_checks.stderr
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
error: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
--> tests/ui/panicking_overflow_checks.rs:5:8
|
||||
|
|
||||
LL | if a + b < a {}
|
||||
| ^^^^^^^^^
|
||||
|
|
||||
= note: `-D clippy::panicking-overflow-checks` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::panicking_overflow_checks)]`
|
||||
|
||||
error: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
--> tests/ui/panicking_overflow_checks.rs:6:8
|
||||
|
|
||||
LL | if a > a + b {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
--> tests/ui/panicking_overflow_checks.rs:7:8
|
||||
|
|
||||
LL | if a + b < b {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
--> tests/ui/panicking_overflow_checks.rs:8:8
|
||||
|
|
||||
LL | if b > a + b {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
--> tests/ui/panicking_overflow_checks.rs:11:8
|
||||
|
|
||||
LL | if a - b > a {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: you are trying to use classic C overflow conditions that will fail in Rust
|
||||
--> tests/ui/panicking_overflow_checks.rs:12:8
|
||||
|
|
||||
LL | if a < a - b {}
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:18:33
|
||||
|
|
||||
LL | *unsafe { Box::from_raw(Box::into_raw(Box::new(o)) as *mut super::issue_11278_a::T<String>) }
|
||||
|
|
@ -7,37 +7,37 @@ LL | *unsafe { Box::from_raw(Box::into_raw(Box::new(o)) as *mut super::i
|
|||
= note: `-D clippy::ptr-as-ptr` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::ptr_as_ptr)]`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:27:13
|
||||
|
|
||||
LL | let _ = ptr as *const i32;
|
||||
| ^^^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `ptr.cast::<i32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:28:13
|
||||
|
|
||||
LL | let _ = mut_ptr as *mut i32;
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `mut_ptr.cast::<i32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:33:17
|
||||
|
|
||||
LL | let _ = *ptr_ptr as *const i32;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `(*ptr_ptr).cast::<i32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:46:25
|
||||
|
|
||||
LL | let _: *const i32 = ptr as *const _;
|
||||
| ^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `ptr.cast()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:47:23
|
||||
|
|
||||
LL | let _: *mut i32 = mut_ptr as _;
|
||||
| ^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `mut_ptr.cast()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:50:21
|
||||
|
|
||||
LL | let _ = inline!($ptr as *const i32);
|
||||
|
|
@ -45,157 +45,157 @@ LL | let _ = inline!($ptr as *const i32);
|
|||
|
|
||||
= note: this error originates in the macro `__inline_mac_fn_main` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:71:13
|
||||
|
|
||||
LL | let _ = ptr as *const i32;
|
||||
| ^^^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `ptr.cast::<i32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:72:13
|
||||
|
|
||||
LL | let _ = mut_ptr as *mut i32;
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: try `pointer::cast`, a safer alternative: `mut_ptr.cast::<i32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:79:9
|
||||
|
|
||||
LL | ptr::null_mut() as *mut u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null_mut::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:83:9
|
||||
|
|
||||
LL | std::ptr::null_mut() as *mut u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `std::ptr::null_mut::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:88:9
|
||||
|
|
||||
LL | ptr::null_mut() as *mut u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null_mut::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:92:9
|
||||
|
|
||||
LL | core::ptr::null_mut() as *mut u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `core::ptr::null_mut::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:97:9
|
||||
|
|
||||
LL | ptr::null() as *const u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:101:9
|
||||
|
|
||||
LL | std::ptr::null() as *const u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `std::ptr::null::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:106:9
|
||||
|
|
||||
LL | ptr::null() as *const u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:110:9
|
||||
|
|
||||
LL | core::ptr::null() as *const u32
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `core::ptr::null::<u32>()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:117:9
|
||||
|
|
||||
LL | ptr::null_mut() as *mut _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:121:9
|
||||
|
|
||||
LL | std::ptr::null_mut() as *mut _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `std::ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:126:9
|
||||
|
|
||||
LL | ptr::null_mut() as *mut _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:130:9
|
||||
|
|
||||
LL | core::ptr::null_mut() as *mut _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `core::ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:135:9
|
||||
|
|
||||
LL | ptr::null() as *const _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:139:9
|
||||
|
|
||||
LL | std::ptr::null() as *const _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `std::ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:144:9
|
||||
|
|
||||
LL | ptr::null() as *const _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:148:9
|
||||
|
|
||||
LL | core::ptr::null() as *const _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `core::ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:155:9
|
||||
|
|
||||
LL | ptr::null_mut() as _
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:159:9
|
||||
|
|
||||
LL | std::ptr::null_mut() as _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `std::ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:164:9
|
||||
|
|
||||
LL | ptr::null_mut() as _
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:168:9
|
||||
|
|
||||
LL | core::ptr::null_mut() as _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `core::ptr::null_mut()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:173:9
|
||||
|
|
||||
LL | ptr::null() as _
|
||||
| ^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:177:9
|
||||
|
|
||||
LL | std::ptr::null() as _
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: try call directly: `std::ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:182:9
|
||||
|
|
||||
LL | ptr::null() as _
|
||||
| ^^^^^^^^^^^^^^^^ help: try call directly: `ptr::null()`
|
||||
|
||||
error: `as` casting between raw pointers without changing its mutability
|
||||
error: `as` casting between raw pointers without changing their constness
|
||||
--> tests/ui/ptr_as_ptr.rs:186:9
|
||||
|
|
||||
LL | core::ptr::null() as _
|
||||
|
|
|
|||
|
|
@ -24,9 +24,11 @@
|
|||
#![allow(clippy::expect_used)]
|
||||
#![allow(clippy::map_unwrap_or)]
|
||||
#![allow(clippy::unwrap_used)]
|
||||
#![allow(clippy::panicking_overflow_checks)]
|
||||
#![allow(clippy::needless_borrow)]
|
||||
#![allow(clippy::single_char_add_str)]
|
||||
#![allow(clippy::module_name_repetitions)]
|
||||
#![allow(clippy::missing_const_for_thread_local)]
|
||||
#![allow(clippy::recursive_format_impl)]
|
||||
#![allow(clippy::unwrap_or_default)]
|
||||
#![allow(clippy::invisible_characters)]
|
||||
|
|
@ -77,12 +79,14 @@
|
|||
#![warn(clippy::map_unwrap_or)]
|
||||
#![warn(clippy::map_unwrap_or)]
|
||||
#![warn(clippy::unwrap_used)]
|
||||
#![warn(clippy::panicking_overflow_checks)]
|
||||
#![warn(clippy::needless_borrow)]
|
||||
#![warn(clippy::expect_used)]
|
||||
#![warn(clippy::map_unwrap_or)]
|
||||
#![warn(clippy::unwrap_used)]
|
||||
#![warn(clippy::single_char_add_str)]
|
||||
#![warn(clippy::module_name_repetitions)]
|
||||
#![warn(clippy::missing_const_for_thread_local)]
|
||||
#![warn(clippy::recursive_format_impl)]
|
||||
#![warn(clippy::unwrap_or_default)]
|
||||
#![warn(clippy::invisible_characters)]
|
||||
|
|
|
|||
|
|
@ -24,9 +24,11 @@
|
|||
#![allow(clippy::expect_used)]
|
||||
#![allow(clippy::map_unwrap_or)]
|
||||
#![allow(clippy::unwrap_used)]
|
||||
#![allow(clippy::panicking_overflow_checks)]
|
||||
#![allow(clippy::needless_borrow)]
|
||||
#![allow(clippy::single_char_add_str)]
|
||||
#![allow(clippy::module_name_repetitions)]
|
||||
#![allow(clippy::missing_const_for_thread_local)]
|
||||
#![allow(clippy::recursive_format_impl)]
|
||||
#![allow(clippy::unwrap_or_default)]
|
||||
#![allow(clippy::invisible_characters)]
|
||||
|
|
@ -77,12 +79,14 @@
|
|||
#![warn(clippy::option_map_unwrap_or)]
|
||||
#![warn(clippy::option_map_unwrap_or_else)]
|
||||
#![warn(clippy::option_unwrap_used)]
|
||||
#![warn(clippy::overflow_check_conditional)]
|
||||
#![warn(clippy::ref_in_deref)]
|
||||
#![warn(clippy::result_expect_used)]
|
||||
#![warn(clippy::result_map_unwrap_or_else)]
|
||||
#![warn(clippy::result_unwrap_used)]
|
||||
#![warn(clippy::single_char_push_str)]
|
||||
#![warn(clippy::stutter)]
|
||||
#![warn(clippy::thread_local_initializer_can_be_made_const)]
|
||||
#![warn(clippy::to_string_in_display)]
|
||||
#![warn(clippy::unwrap_or_else_default)]
|
||||
#![warn(clippy::zero_width_space)]
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error: lint `clippy::almost_complete_letter_range` has been renamed to `clippy::almost_complete_range`
|
||||
--> tests/ui/rename.rs:56:9
|
||||
--> tests/ui/rename.rs:58:9
|
||||
|
|
||||
LL | #![warn(clippy::almost_complete_letter_range)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::almost_complete_range`
|
||||
|
|
@ -8,346 +8,358 @@ LL | #![warn(clippy::almost_complete_letter_range)]
|
|||
= help: to override `-D warnings` add `#[allow(renamed_and_removed_lints)]`
|
||||
|
||||
error: lint `clippy::blacklisted_name` has been renamed to `clippy::disallowed_names`
|
||||
--> tests/ui/rename.rs:57:9
|
||||
--> tests/ui/rename.rs:59:9
|
||||
|
|
||||
LL | #![warn(clippy::blacklisted_name)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::disallowed_names`
|
||||
|
||||
error: lint `clippy::block_in_if_condition_expr` has been renamed to `clippy::blocks_in_conditions`
|
||||
--> tests/ui/rename.rs:58:9
|
||||
--> tests/ui/rename.rs:60:9
|
||||
|
|
||||
LL | #![warn(clippy::block_in_if_condition_expr)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::blocks_in_conditions`
|
||||
|
||||
error: lint `clippy::block_in_if_condition_stmt` has been renamed to `clippy::blocks_in_conditions`
|
||||
--> tests/ui/rename.rs:59:9
|
||||
--> tests/ui/rename.rs:61:9
|
||||
|
|
||||
LL | #![warn(clippy::block_in_if_condition_stmt)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::blocks_in_conditions`
|
||||
|
||||
error: lint `clippy::blocks_in_if_conditions` has been renamed to `clippy::blocks_in_conditions`
|
||||
--> tests/ui/rename.rs:60:9
|
||||
--> tests/ui/rename.rs:62:9
|
||||
|
|
||||
LL | #![warn(clippy::blocks_in_if_conditions)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::blocks_in_conditions`
|
||||
|
||||
error: lint `clippy::box_vec` has been renamed to `clippy::box_collection`
|
||||
--> tests/ui/rename.rs:61:9
|
||||
--> tests/ui/rename.rs:63:9
|
||||
|
|
||||
LL | #![warn(clippy::box_vec)]
|
||||
| ^^^^^^^^^^^^^^^ help: use the new name: `clippy::box_collection`
|
||||
|
||||
error: lint `clippy::const_static_lifetime` has been renamed to `clippy::redundant_static_lifetimes`
|
||||
--> tests/ui/rename.rs:62:9
|
||||
--> tests/ui/rename.rs:64:9
|
||||
|
|
||||
LL | #![warn(clippy::const_static_lifetime)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::redundant_static_lifetimes`
|
||||
|
||||
error: lint `clippy::cyclomatic_complexity` has been renamed to `clippy::cognitive_complexity`
|
||||
--> tests/ui/rename.rs:63:9
|
||||
--> tests/ui/rename.rs:65:9
|
||||
|
|
||||
LL | #![warn(clippy::cyclomatic_complexity)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::cognitive_complexity`
|
||||
|
||||
error: lint `clippy::derive_hash_xor_eq` has been renamed to `clippy::derived_hash_with_manual_eq`
|
||||
--> tests/ui/rename.rs:64:9
|
||||
--> tests/ui/rename.rs:66:9
|
||||
|
|
||||
LL | #![warn(clippy::derive_hash_xor_eq)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::derived_hash_with_manual_eq`
|
||||
|
||||
error: lint `clippy::disallowed_method` has been renamed to `clippy::disallowed_methods`
|
||||
--> tests/ui/rename.rs:65:9
|
||||
--> tests/ui/rename.rs:67:9
|
||||
|
|
||||
LL | #![warn(clippy::disallowed_method)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::disallowed_methods`
|
||||
|
||||
error: lint `clippy::disallowed_type` has been renamed to `clippy::disallowed_types`
|
||||
--> tests/ui/rename.rs:66:9
|
||||
--> tests/ui/rename.rs:68:9
|
||||
|
|
||||
LL | #![warn(clippy::disallowed_type)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::disallowed_types`
|
||||
|
||||
error: lint `clippy::eval_order_dependence` has been renamed to `clippy::mixed_read_write_in_expression`
|
||||
--> tests/ui/rename.rs:67:9
|
||||
--> tests/ui/rename.rs:69:9
|
||||
|
|
||||
LL | #![warn(clippy::eval_order_dependence)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::mixed_read_write_in_expression`
|
||||
|
||||
error: lint `clippy::identity_conversion` has been renamed to `clippy::useless_conversion`
|
||||
--> tests/ui/rename.rs:68:9
|
||||
--> tests/ui/rename.rs:70:9
|
||||
|
|
||||
LL | #![warn(clippy::identity_conversion)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::useless_conversion`
|
||||
|
||||
error: lint `clippy::if_let_some_result` has been renamed to `clippy::match_result_ok`
|
||||
--> tests/ui/rename.rs:69:9
|
||||
--> tests/ui/rename.rs:71:9
|
||||
|
|
||||
LL | #![warn(clippy::if_let_some_result)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::match_result_ok`
|
||||
|
||||
error: lint `clippy::incorrect_clone_impl_on_copy_type` has been renamed to `clippy::non_canonical_clone_impl`
|
||||
--> tests/ui/rename.rs:70:9
|
||||
--> tests/ui/rename.rs:72:9
|
||||
|
|
||||
LL | #![warn(clippy::incorrect_clone_impl_on_copy_type)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::non_canonical_clone_impl`
|
||||
|
||||
error: lint `clippy::incorrect_partial_ord_impl_on_ord_type` has been renamed to `clippy::non_canonical_partial_ord_impl`
|
||||
--> tests/ui/rename.rs:71:9
|
||||
--> tests/ui/rename.rs:73:9
|
||||
|
|
||||
LL | #![warn(clippy::incorrect_partial_ord_impl_on_ord_type)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::non_canonical_partial_ord_impl`
|
||||
|
||||
error: lint `clippy::integer_arithmetic` has been renamed to `clippy::arithmetic_side_effects`
|
||||
--> tests/ui/rename.rs:72:9
|
||||
--> tests/ui/rename.rs:74:9
|
||||
|
|
||||
LL | #![warn(clippy::integer_arithmetic)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::arithmetic_side_effects`
|
||||
|
||||
error: lint `clippy::logic_bug` has been renamed to `clippy::overly_complex_bool_expr`
|
||||
--> tests/ui/rename.rs:73:9
|
||||
--> tests/ui/rename.rs:75:9
|
||||
|
|
||||
LL | #![warn(clippy::logic_bug)]
|
||||
| ^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::overly_complex_bool_expr`
|
||||
|
||||
error: lint `clippy::new_without_default_derive` has been renamed to `clippy::new_without_default`
|
||||
--> tests/ui/rename.rs:74:9
|
||||
--> tests/ui/rename.rs:76:9
|
||||
|
|
||||
LL | #![warn(clippy::new_without_default_derive)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::new_without_default`
|
||||
|
||||
error: lint `clippy::option_and_then_some` has been renamed to `clippy::bind_instead_of_map`
|
||||
--> tests/ui/rename.rs:75:9
|
||||
--> tests/ui/rename.rs:77:9
|
||||
|
|
||||
LL | #![warn(clippy::option_and_then_some)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::bind_instead_of_map`
|
||||
|
||||
error: lint `clippy::option_expect_used` has been renamed to `clippy::expect_used`
|
||||
--> tests/ui/rename.rs:76:9
|
||||
--> tests/ui/rename.rs:78:9
|
||||
|
|
||||
LL | #![warn(clippy::option_expect_used)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::expect_used`
|
||||
|
||||
error: lint `clippy::option_map_unwrap_or` has been renamed to `clippy::map_unwrap_or`
|
||||
--> tests/ui/rename.rs:77:9
|
||||
--> tests/ui/rename.rs:79:9
|
||||
|
|
||||
LL | #![warn(clippy::option_map_unwrap_or)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::map_unwrap_or`
|
||||
|
||||
error: lint `clippy::option_map_unwrap_or_else` has been renamed to `clippy::map_unwrap_or`
|
||||
--> tests/ui/rename.rs:78:9
|
||||
--> tests/ui/rename.rs:80:9
|
||||
|
|
||||
LL | #![warn(clippy::option_map_unwrap_or_else)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::map_unwrap_or`
|
||||
|
||||
error: lint `clippy::option_unwrap_used` has been renamed to `clippy::unwrap_used`
|
||||
--> tests/ui/rename.rs:79:9
|
||||
--> tests/ui/rename.rs:81:9
|
||||
|
|
||||
LL | #![warn(clippy::option_unwrap_used)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::unwrap_used`
|
||||
|
||||
error: lint `clippy::overflow_check_conditional` has been renamed to `clippy::panicking_overflow_checks`
|
||||
--> tests/ui/rename.rs:82:9
|
||||
|
|
||||
LL | #![warn(clippy::overflow_check_conditional)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::panicking_overflow_checks`
|
||||
|
||||
error: lint `clippy::ref_in_deref` has been renamed to `clippy::needless_borrow`
|
||||
--> tests/ui/rename.rs:80:9
|
||||
--> tests/ui/rename.rs:83:9
|
||||
|
|
||||
LL | #![warn(clippy::ref_in_deref)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::needless_borrow`
|
||||
|
||||
error: lint `clippy::result_expect_used` has been renamed to `clippy::expect_used`
|
||||
--> tests/ui/rename.rs:81:9
|
||||
--> tests/ui/rename.rs:84:9
|
||||
|
|
||||
LL | #![warn(clippy::result_expect_used)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::expect_used`
|
||||
|
||||
error: lint `clippy::result_map_unwrap_or_else` has been renamed to `clippy::map_unwrap_or`
|
||||
--> tests/ui/rename.rs:82:9
|
||||
--> tests/ui/rename.rs:85:9
|
||||
|
|
||||
LL | #![warn(clippy::result_map_unwrap_or_else)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::map_unwrap_or`
|
||||
|
||||
error: lint `clippy::result_unwrap_used` has been renamed to `clippy::unwrap_used`
|
||||
--> tests/ui/rename.rs:83:9
|
||||
--> tests/ui/rename.rs:86:9
|
||||
|
|
||||
LL | #![warn(clippy::result_unwrap_used)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::unwrap_used`
|
||||
|
||||
error: lint `clippy::single_char_push_str` has been renamed to `clippy::single_char_add_str`
|
||||
--> tests/ui/rename.rs:84:9
|
||||
--> tests/ui/rename.rs:87:9
|
||||
|
|
||||
LL | #![warn(clippy::single_char_push_str)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::single_char_add_str`
|
||||
|
||||
error: lint `clippy::stutter` has been renamed to `clippy::module_name_repetitions`
|
||||
--> tests/ui/rename.rs:85:9
|
||||
--> tests/ui/rename.rs:88:9
|
||||
|
|
||||
LL | #![warn(clippy::stutter)]
|
||||
| ^^^^^^^^^^^^^^^ help: use the new name: `clippy::module_name_repetitions`
|
||||
|
||||
error: lint `clippy::thread_local_initializer_can_be_made_const` has been renamed to `clippy::missing_const_for_thread_local`
|
||||
--> tests/ui/rename.rs:89:9
|
||||
|
|
||||
LL | #![warn(clippy::thread_local_initializer_can_be_made_const)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::missing_const_for_thread_local`
|
||||
|
||||
error: lint `clippy::to_string_in_display` has been renamed to `clippy::recursive_format_impl`
|
||||
--> tests/ui/rename.rs:86:9
|
||||
--> tests/ui/rename.rs:90:9
|
||||
|
|
||||
LL | #![warn(clippy::to_string_in_display)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::recursive_format_impl`
|
||||
|
||||
error: lint `clippy::unwrap_or_else_default` has been renamed to `clippy::unwrap_or_default`
|
||||
--> tests/ui/rename.rs:87:9
|
||||
--> tests/ui/rename.rs:91:9
|
||||
|
|
||||
LL | #![warn(clippy::unwrap_or_else_default)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::unwrap_or_default`
|
||||
|
||||
error: lint `clippy::zero_width_space` has been renamed to `clippy::invisible_characters`
|
||||
--> tests/ui/rename.rs:88:9
|
||||
--> tests/ui/rename.rs:92:9
|
||||
|
|
||||
LL | #![warn(clippy::zero_width_space)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::invisible_characters`
|
||||
|
||||
error: lint `clippy::cast_ref_to_mut` has been renamed to `invalid_reference_casting`
|
||||
--> tests/ui/rename.rs:89:9
|
||||
--> tests/ui/rename.rs:93:9
|
||||
|
|
||||
LL | #![warn(clippy::cast_ref_to_mut)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `invalid_reference_casting`
|
||||
|
||||
error: lint `clippy::clone_double_ref` has been renamed to `suspicious_double_ref_op`
|
||||
--> tests/ui/rename.rs:90:9
|
||||
--> tests/ui/rename.rs:94:9
|
||||
|
|
||||
LL | #![warn(clippy::clone_double_ref)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `suspicious_double_ref_op`
|
||||
|
||||
error: lint `clippy::cmp_nan` has been renamed to `invalid_nan_comparisons`
|
||||
--> tests/ui/rename.rs:91:9
|
||||
--> tests/ui/rename.rs:95:9
|
||||
|
|
||||
LL | #![warn(clippy::cmp_nan)]
|
||||
| ^^^^^^^^^^^^^^^ help: use the new name: `invalid_nan_comparisons`
|
||||
|
||||
error: lint `clippy::drop_bounds` has been renamed to `drop_bounds`
|
||||
--> tests/ui/rename.rs:92:9
|
||||
--> tests/ui/rename.rs:96:9
|
||||
|
|
||||
LL | #![warn(clippy::drop_bounds)]
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: use the new name: `drop_bounds`
|
||||
|
||||
error: lint `clippy::drop_copy` has been renamed to `dropping_copy_types`
|
||||
--> tests/ui/rename.rs:93:9
|
||||
--> tests/ui/rename.rs:97:9
|
||||
|
|
||||
LL | #![warn(clippy::drop_copy)]
|
||||
| ^^^^^^^^^^^^^^^^^ help: use the new name: `dropping_copy_types`
|
||||
|
||||
error: lint `clippy::drop_ref` has been renamed to `dropping_references`
|
||||
--> tests/ui/rename.rs:94:9
|
||||
--> tests/ui/rename.rs:98:9
|
||||
|
|
||||
LL | #![warn(clippy::drop_ref)]
|
||||
| ^^^^^^^^^^^^^^^^ help: use the new name: `dropping_references`
|
||||
|
||||
error: lint `clippy::fn_null_check` has been renamed to `useless_ptr_null_checks`
|
||||
--> tests/ui/rename.rs:95:9
|
||||
--> tests/ui/rename.rs:99:9
|
||||
|
|
||||
LL | #![warn(clippy::fn_null_check)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `useless_ptr_null_checks`
|
||||
|
||||
error: lint `clippy::for_loop_over_option` has been renamed to `for_loops_over_fallibles`
|
||||
--> tests/ui/rename.rs:96:9
|
||||
--> tests/ui/rename.rs:100:9
|
||||
|
|
||||
LL | #![warn(clippy::for_loop_over_option)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `for_loops_over_fallibles`
|
||||
|
||||
error: lint `clippy::for_loop_over_result` has been renamed to `for_loops_over_fallibles`
|
||||
--> tests/ui/rename.rs:97:9
|
||||
--> tests/ui/rename.rs:101:9
|
||||
|
|
||||
LL | #![warn(clippy::for_loop_over_result)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `for_loops_over_fallibles`
|
||||
|
||||
error: lint `clippy::for_loops_over_fallibles` has been renamed to `for_loops_over_fallibles`
|
||||
--> tests/ui/rename.rs:98:9
|
||||
--> tests/ui/rename.rs:102:9
|
||||
|
|
||||
LL | #![warn(clippy::for_loops_over_fallibles)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `for_loops_over_fallibles`
|
||||
|
||||
error: lint `clippy::forget_copy` has been renamed to `forgetting_copy_types`
|
||||
--> tests/ui/rename.rs:99:9
|
||||
--> tests/ui/rename.rs:103:9
|
||||
|
|
||||
LL | #![warn(clippy::forget_copy)]
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: use the new name: `forgetting_copy_types`
|
||||
|
||||
error: lint `clippy::forget_ref` has been renamed to `forgetting_references`
|
||||
--> tests/ui/rename.rs:100:9
|
||||
--> tests/ui/rename.rs:104:9
|
||||
|
|
||||
LL | #![warn(clippy::forget_ref)]
|
||||
| ^^^^^^^^^^^^^^^^^^ help: use the new name: `forgetting_references`
|
||||
|
||||
error: lint `clippy::into_iter_on_array` has been renamed to `array_into_iter`
|
||||
--> tests/ui/rename.rs:101:9
|
||||
--> tests/ui/rename.rs:105:9
|
||||
|
|
||||
LL | #![warn(clippy::into_iter_on_array)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `array_into_iter`
|
||||
|
||||
error: lint `clippy::invalid_atomic_ordering` has been renamed to `invalid_atomic_ordering`
|
||||
--> tests/ui/rename.rs:102:9
|
||||
--> tests/ui/rename.rs:106:9
|
||||
|
|
||||
LL | #![warn(clippy::invalid_atomic_ordering)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `invalid_atomic_ordering`
|
||||
|
||||
error: lint `clippy::invalid_ref` has been renamed to `invalid_value`
|
||||
--> tests/ui/rename.rs:103:9
|
||||
--> tests/ui/rename.rs:107:9
|
||||
|
|
||||
LL | #![warn(clippy::invalid_ref)]
|
||||
| ^^^^^^^^^^^^^^^^^^^ help: use the new name: `invalid_value`
|
||||
|
||||
error: lint `clippy::invalid_utf8_in_unchecked` has been renamed to `invalid_from_utf8_unchecked`
|
||||
--> tests/ui/rename.rs:104:9
|
||||
--> tests/ui/rename.rs:108:9
|
||||
|
|
||||
LL | #![warn(clippy::invalid_utf8_in_unchecked)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `invalid_from_utf8_unchecked`
|
||||
|
||||
error: lint `clippy::let_underscore_drop` has been renamed to `let_underscore_drop`
|
||||
--> tests/ui/rename.rs:105:9
|
||||
--> tests/ui/rename.rs:109:9
|
||||
|
|
||||
LL | #![warn(clippy::let_underscore_drop)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `let_underscore_drop`
|
||||
|
||||
error: lint `clippy::mem_discriminant_non_enum` has been renamed to `enum_intrinsics_non_enums`
|
||||
--> tests/ui/rename.rs:106:9
|
||||
--> tests/ui/rename.rs:110:9
|
||||
|
|
||||
LL | #![warn(clippy::mem_discriminant_non_enum)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `enum_intrinsics_non_enums`
|
||||
|
||||
error: lint `clippy::panic_params` has been renamed to `non_fmt_panics`
|
||||
--> tests/ui/rename.rs:107:9
|
||||
--> tests/ui/rename.rs:111:9
|
||||
|
|
||||
LL | #![warn(clippy::panic_params)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: use the new name: `non_fmt_panics`
|
||||
|
||||
error: lint `clippy::positional_named_format_parameters` has been renamed to `named_arguments_used_positionally`
|
||||
--> tests/ui/rename.rs:108:9
|
||||
--> tests/ui/rename.rs:112:9
|
||||
|
|
||||
LL | #![warn(clippy::positional_named_format_parameters)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `named_arguments_used_positionally`
|
||||
|
||||
error: lint `clippy::temporary_cstring_as_ptr` has been renamed to `temporary_cstring_as_ptr`
|
||||
--> tests/ui/rename.rs:109:9
|
||||
--> tests/ui/rename.rs:113:9
|
||||
|
|
||||
LL | #![warn(clippy::temporary_cstring_as_ptr)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `temporary_cstring_as_ptr`
|
||||
|
||||
error: lint `clippy::undropped_manually_drops` has been renamed to `undropped_manually_drops`
|
||||
--> tests/ui/rename.rs:110:9
|
||||
--> tests/ui/rename.rs:114:9
|
||||
|
|
||||
LL | #![warn(clippy::undropped_manually_drops)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `undropped_manually_drops`
|
||||
|
||||
error: lint `clippy::unknown_clippy_lints` has been renamed to `unknown_lints`
|
||||
--> tests/ui/rename.rs:111:9
|
||||
--> tests/ui/rename.rs:115:9
|
||||
|
|
||||
LL | #![warn(clippy::unknown_clippy_lints)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `unknown_lints`
|
||||
|
||||
error: lint `clippy::unused_label` has been renamed to `unused_labels`
|
||||
--> tests/ui/rename.rs:112:9
|
||||
--> tests/ui/rename.rs:116:9
|
||||
|
|
||||
LL | #![warn(clippy::unused_label)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^ help: use the new name: `unused_labels`
|
||||
|
||||
error: lint `clippy::vtable_address_comparisons` has been renamed to `ambiguous_wide_pointer_comparisons`
|
||||
--> tests/ui/rename.rs:113:9
|
||||
--> tests/ui/rename.rs:117:9
|
||||
|
|
||||
LL | #![warn(clippy::vtable_address_comparisons)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `ambiguous_wide_pointer_comparisons`
|
||||
|
||||
error: aborting due to 58 previous errors
|
||||
error: aborting due to 60 previous errors
|
||||
|
||||
|
|
|
|||
83
src/tools/clippy/tests/ui/set_contains_or_insert.rs
Normal file
83
src/tools/clippy/tests/ui/set_contains_or_insert.rs
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
#![allow(unused)]
|
||||
#![allow(clippy::nonminimal_bool)]
|
||||
#![allow(clippy::needless_borrow)]
|
||||
#![warn(clippy::set_contains_or_insert)]
|
||||
|
||||
use std::collections::HashSet;
|
||||
|
||||
fn main() {
|
||||
should_warn_cases();
|
||||
|
||||
should_not_warn_cases();
|
||||
}
|
||||
|
||||
fn should_warn_cases() {
|
||||
let mut set = HashSet::new();
|
||||
let value = 5;
|
||||
|
||||
if !set.contains(&value) {
|
||||
set.insert(value);
|
||||
println!("Just a comment");
|
||||
}
|
||||
|
||||
if set.contains(&value) {
|
||||
set.insert(value);
|
||||
println!("Just a comment");
|
||||
}
|
||||
|
||||
if !set.contains(&value) {
|
||||
set.insert(value);
|
||||
}
|
||||
|
||||
if !!set.contains(&value) {
|
||||
set.insert(value);
|
||||
println!("Just a comment");
|
||||
}
|
||||
|
||||
if (&set).contains(&value) {
|
||||
set.insert(value);
|
||||
}
|
||||
|
||||
let borrow_value = &6;
|
||||
if !set.contains(borrow_value) {
|
||||
set.insert(*borrow_value);
|
||||
}
|
||||
|
||||
let borrow_set = &mut set;
|
||||
if !borrow_set.contains(&value) {
|
||||
borrow_set.insert(value);
|
||||
}
|
||||
}
|
||||
|
||||
fn should_not_warn_cases() {
|
||||
let mut set = HashSet::new();
|
||||
let value = 5;
|
||||
let another_value = 6;
|
||||
|
||||
if !set.contains(&value) {
|
||||
set.insert(another_value);
|
||||
}
|
||||
|
||||
if !set.contains(&value) {
|
||||
println!("Just a comment");
|
||||
}
|
||||
|
||||
if simply_true() {
|
||||
set.insert(value);
|
||||
}
|
||||
|
||||
if !set.contains(&value) {
|
||||
set.replace(value); //it is not insert
|
||||
println!("Just a comment");
|
||||
}
|
||||
|
||||
if set.contains(&value) {
|
||||
println!("value is already in set");
|
||||
} else {
|
||||
set.insert(value);
|
||||
}
|
||||
}
|
||||
|
||||
fn simply_true() -> bool {
|
||||
true
|
||||
}
|
||||
61
src/tools/clippy/tests/ui/set_contains_or_insert.stderr
Normal file
61
src/tools/clippy/tests/ui/set_contains_or_insert.stderr
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
error: usage of `HashSet::insert` after `HashSet::contains`
|
||||
--> tests/ui/set_contains_or_insert.rs:18:13
|
||||
|
|
||||
LL | if !set.contains(&value) {
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
LL | set.insert(value);
|
||||
| ^^^^^^^^^^^^^
|
||||
|
|
||||
= note: `-D clippy::set-contains-or-insert` implied by `-D warnings`
|
||||
= help: to override `-D warnings` add `#[allow(clippy::set_contains_or_insert)]`
|
||||
|
||||
error: usage of `HashSet::insert` after `HashSet::contains`
|
||||
--> tests/ui/set_contains_or_insert.rs:23:12
|
||||
|
|
||||
LL | if set.contains(&value) {
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
LL | set.insert(value);
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: usage of `HashSet::insert` after `HashSet::contains`
|
||||
--> tests/ui/set_contains_or_insert.rs:28:13
|
||||
|
|
||||
LL | if !set.contains(&value) {
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
LL | set.insert(value);
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: usage of `HashSet::insert` after `HashSet::contains`
|
||||
--> tests/ui/set_contains_or_insert.rs:32:14
|
||||
|
|
||||
LL | if !!set.contains(&value) {
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
LL | set.insert(value);
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: usage of `HashSet::insert` after `HashSet::contains`
|
||||
--> tests/ui/set_contains_or_insert.rs:37:15
|
||||
|
|
||||
LL | if (&set).contains(&value) {
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
LL | set.insert(value);
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: usage of `HashSet::insert` after `HashSet::contains`
|
||||
--> tests/ui/set_contains_or_insert.rs:42:13
|
||||
|
|
||||
LL | if !set.contains(borrow_value) {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
LL | set.insert(*borrow_value);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
error: usage of `HashSet::insert` after `HashSet::contains`
|
||||
--> tests/ui/set_contains_or_insert.rs:47:20
|
||||
|
|
||||
LL | if !borrow_set.contains(&value) {
|
||||
| ^^^^^^^^^^^^^^^^
|
||||
LL | borrow_set.insert(value);
|
||||
| ^^^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
|
||||
|
|
@ -801,4 +801,30 @@ fn should_not_trigger_lint_with_explicit_drop() {
|
|||
}
|
||||
}
|
||||
|
||||
fn should_trigger_lint_in_if_let() {
|
||||
let mutex = Mutex::new(vec![1]);
|
||||
|
||||
if let Some(val) = mutex.lock().unwrap().first().copied() {
|
||||
//~^ ERROR: temporary with significant `Drop` in `if let` scrutinee will live until the
|
||||
//~| NOTE: this might lead to deadlocks or other unexpected behavior
|
||||
println!("{}", val);
|
||||
}
|
||||
|
||||
// Should not trigger lint without the final `copied()`, because we actually hold a reference
|
||||
// (i.e., the `val`) to the locked data.
|
||||
if let Some(val) = mutex.lock().unwrap().first() {
|
||||
println!("{}", val);
|
||||
};
|
||||
}
|
||||
|
||||
fn should_trigger_lint_in_while_let() {
|
||||
let mutex = Mutex::new(vec![1]);
|
||||
|
||||
while let Some(val) = mutex.lock().unwrap().pop() {
|
||||
//~^ ERROR: temporary with significant `Drop` in `while let` scrutinee will live until the
|
||||
//~| NOTE: this might lead to deadlocks or other unexpected behavior
|
||||
println!("{}", val);
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -541,5 +541,32 @@ LL ~ let value = mutex.lock().unwrap()[0];
|
|||
LL ~ for val in [value, 2] {
|
||||
|
|
||||
|
||||
error: aborting due to 27 previous errors
|
||||
error: temporary with significant `Drop` in `if let` scrutinee will live until the end of the `if let` expression
|
||||
--> tests/ui/significant_drop_in_scrutinee.rs:807:24
|
||||
|
|
||||
LL | if let Some(val) = mutex.lock().unwrap().first().copied() {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
...
|
||||
LL | }
|
||||
| - temporary lives until here
|
||||
|
|
||||
= note: this might lead to deadlocks or other unexpected behavior
|
||||
help: try moving the temporary above the match
|
||||
|
|
||||
LL ~ let value = mutex.lock().unwrap().first().copied();
|
||||
LL ~ if let Some(val) = value {
|
||||
|
|
||||
|
||||
error: temporary with significant `Drop` in `while let` scrutinee will live until the end of the `while let` expression
|
||||
--> tests/ui/significant_drop_in_scrutinee.rs:823:27
|
||||
|
|
||||
LL | while let Some(val) = mutex.lock().unwrap().pop() {
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
...
|
||||
LL | }
|
||||
| - temporary lives until here
|
||||
|
|
||||
= note: this might lead to deadlocks or other unexpected behavior
|
||||
|
||||
error: aborting due to 29 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ fn get_number() -> i32 {
|
|||
0
|
||||
}
|
||||
|
||||
fn get_usize() -> usize {
|
||||
const fn get_usize() -> usize {
|
||||
0
|
||||
}
|
||||
fn get_struct() -> Struct {
|
||||
|
|
@ -113,4 +113,16 @@ fn main() {
|
|||
'label: {
|
||||
break 'label
|
||||
};
|
||||
let () = const {
|
||||
[42, 55][get_usize()];
|
||||
};
|
||||
}
|
||||
|
||||
const _: () = {
|
||||
[42, 55][get_usize()];
|
||||
};
|
||||
|
||||
const fn foo() {
|
||||
assert!([42, 55].len() > get_usize());
|
||||
//~^ ERROR: unnecessary operation
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ fn get_number() -> i32 {
|
|||
0
|
||||
}
|
||||
|
||||
fn get_usize() -> usize {
|
||||
const fn get_usize() -> usize {
|
||||
0
|
||||
}
|
||||
fn get_struct() -> Struct {
|
||||
|
|
@ -117,4 +117,16 @@ fn main() {
|
|||
'label: {
|
||||
break 'label
|
||||
};
|
||||
let () = const {
|
||||
[42, 55][get_usize()];
|
||||
};
|
||||
}
|
||||
|
||||
const _: () = {
|
||||
[42, 55][get_usize()];
|
||||
};
|
||||
|
||||
const fn foo() {
|
||||
[42, 55][get_usize()];
|
||||
//~^ ERROR: unnecessary operation
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,5 +119,11 @@ LL | | s: String::from("blah"),
|
|||
LL | | };
|
||||
| |______^ help: statement can be reduced to: `String::from("blah");`
|
||||
|
||||
error: aborting due to 19 previous errors
|
||||
error: unnecessary operation
|
||||
--> tests/ui/unnecessary_operation.rs:130:5
|
||||
|
|
||||
LL | [42, 55][get_usize()];
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: statement can be written as: `assert!([42, 55].len() > get_usize());`
|
||||
|
||||
error: aborting due to 20 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -157,6 +157,25 @@ fn main() {
|
|||
require_path(&std::path::PathBuf::from("x"));
|
||||
require_str(&String::from("x"));
|
||||
require_slice(&[String::from("x")]);
|
||||
|
||||
let slice = [0u8; 1024];
|
||||
let _ref_str: &str = core::str::from_utf8(&slice).expect("not UTF-8");
|
||||
let _ref_str: &str = core::str::from_utf8(b"foo").unwrap();
|
||||
let _ref_str: &str = core::str::from_utf8(b"foo".as_slice()).unwrap();
|
||||
// Expression is of type `&String`, can't suggest `str::from_utf8` here
|
||||
let _ref_string = &String::from_utf8(b"foo".to_vec()).unwrap();
|
||||
macro_rules! arg_from_macro {
|
||||
() => {
|
||||
b"foo".to_vec()
|
||||
};
|
||||
}
|
||||
macro_rules! string_from_utf8_from_macro {
|
||||
() => {
|
||||
&String::from_utf8(b"foo".to_vec()).unwrap()
|
||||
};
|
||||
}
|
||||
let _ref_str: &str = &String::from_utf8(arg_from_macro!()).unwrap();
|
||||
let _ref_str: &str = string_from_utf8_from_macro!();
|
||||
}
|
||||
|
||||
fn require_c_str(_: &CStr) {}
|
||||
|
|
|
|||
|
|
@ -157,6 +157,25 @@ fn main() {
|
|||
require_path(&std::path::PathBuf::from("x").to_path_buf());
|
||||
require_str(&String::from("x").to_string());
|
||||
require_slice(&[String::from("x")].to_owned());
|
||||
|
||||
let slice = [0u8; 1024];
|
||||
let _ref_str: &str = &String::from_utf8(slice.to_vec()).expect("not UTF-8");
|
||||
let _ref_str: &str = &String::from_utf8(b"foo".to_vec()).unwrap();
|
||||
let _ref_str: &str = &String::from_utf8(b"foo".as_slice().to_owned()).unwrap();
|
||||
// Expression is of type `&String`, can't suggest `str::from_utf8` here
|
||||
let _ref_string = &String::from_utf8(b"foo".to_vec()).unwrap();
|
||||
macro_rules! arg_from_macro {
|
||||
() => {
|
||||
b"foo".to_vec()
|
||||
};
|
||||
}
|
||||
macro_rules! string_from_utf8_from_macro {
|
||||
() => {
|
||||
&String::from_utf8(b"foo".to_vec()).unwrap()
|
||||
};
|
||||
}
|
||||
let _ref_str: &str = &String::from_utf8(arg_from_macro!()).unwrap();
|
||||
let _ref_str: &str = string_from_utf8_from_macro!();
|
||||
}
|
||||
|
||||
fn require_c_str(_: &CStr) {}
|
||||
|
|
|
|||
|
|
@ -477,8 +477,44 @@ error: unnecessary use of `to_owned`
|
|||
LL | let _ = IntoIterator::into_iter([std::path::PathBuf::new()][..].to_owned());
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `[std::path::PathBuf::new()][..].iter().cloned()`
|
||||
|
||||
error: allocating a new `String` only to create a temporary `&str` from it
|
||||
--> tests/ui/unnecessary_to_owned.rs:162:26
|
||||
|
|
||||
LL | let _ref_str: &str = &String::from_utf8(slice.to_vec()).expect("not UTF-8");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: convert from `&[u8]` to `&str` directly
|
||||
|
|
||||
LL - let _ref_str: &str = &String::from_utf8(slice.to_vec()).expect("not UTF-8");
|
||||
LL + let _ref_str: &str = core::str::from_utf8(&slice).expect("not UTF-8");
|
||||
|
|
||||
|
||||
error: allocating a new `String` only to create a temporary `&str` from it
|
||||
--> tests/ui/unnecessary_to_owned.rs:163:26
|
||||
|
|
||||
LL | let _ref_str: &str = &String::from_utf8(b"foo".to_vec()).unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: convert from `&[u8]` to `&str` directly
|
||||
|
|
||||
LL - let _ref_str: &str = &String::from_utf8(b"foo".to_vec()).unwrap();
|
||||
LL + let _ref_str: &str = core::str::from_utf8(b"foo").unwrap();
|
||||
|
|
||||
|
||||
error: allocating a new `String` only to create a temporary `&str` from it
|
||||
--> tests/ui/unnecessary_to_owned.rs:164:26
|
||||
|
|
||||
LL | let _ref_str: &str = &String::from_utf8(b"foo".as_slice().to_owned()).unwrap();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
help: convert from `&[u8]` to `&str` directly
|
||||
|
|
||||
LL - let _ref_str: &str = &String::from_utf8(b"foo".as_slice().to_owned()).unwrap();
|
||||
LL + let _ref_str: &str = core::str::from_utf8(b"foo".as_slice()).unwrap();
|
||||
|
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> tests/ui/unnecessary_to_owned.rs:202:14
|
||||
--> tests/ui/unnecessary_to_owned.rs:221:14
|
||||
|
|
||||
LL | for t in file_types.to_vec() {
|
||||
| ^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -494,64 +530,64 @@ LL + let path = match get_file_path(t) {
|
|||
|
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> tests/ui/unnecessary_to_owned.rs:225:14
|
||||
--> tests/ui/unnecessary_to_owned.rs:244:14
|
||||
|
|
||||
LL | let _ = &["x"][..].to_vec().into_iter();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `["x"][..].iter().cloned()`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> tests/ui/unnecessary_to_owned.rs:230:14
|
||||
--> tests/ui/unnecessary_to_owned.rs:249:14
|
||||
|
|
||||
LL | let _ = &["x"][..].to_vec().into_iter();
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use: `["x"][..].iter().copied()`
|
||||
|
||||
error: unnecessary use of `to_string`
|
||||
--> tests/ui/unnecessary_to_owned.rs:278:24
|
||||
--> tests/ui/unnecessary_to_owned.rs:297:24
|
||||
|
|
||||
LL | Box::new(build(y.to_string()))
|
||||
| ^^^^^^^^^^^^^ help: use: `y`
|
||||
|
||||
error: unnecessary use of `to_string`
|
||||
--> tests/ui/unnecessary_to_owned.rs:387:12
|
||||
--> tests/ui/unnecessary_to_owned.rs:406:12
|
||||
|
|
||||
LL | id("abc".to_string())
|
||||
| ^^^^^^^^^^^^^^^^^ help: use: `"abc"`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> tests/ui/unnecessary_to_owned.rs:530:37
|
||||
--> tests/ui/unnecessary_to_owned.rs:549:37
|
||||
|
|
||||
LL | IntoFuture::into_future(foo([].to_vec(), &0));
|
||||
| ^^^^^^^^^^^ help: use: `[]`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> tests/ui/unnecessary_to_owned.rs:540:18
|
||||
--> tests/ui/unnecessary_to_owned.rs:559:18
|
||||
|
|
||||
LL | s.remove(&a.to_vec());
|
||||
| ^^^^^^^^^^^ help: replace it with: `a`
|
||||
|
||||
error: unnecessary use of `to_owned`
|
||||
--> tests/ui/unnecessary_to_owned.rs:544:14
|
||||
--> tests/ui/unnecessary_to_owned.rs:563:14
|
||||
|
|
||||
LL | s.remove(&"b".to_owned());
|
||||
| ^^^^^^^^^^^^^^^ help: replace it with: `"b"`
|
||||
|
||||
error: unnecessary use of `to_string`
|
||||
--> tests/ui/unnecessary_to_owned.rs:545:14
|
||||
--> tests/ui/unnecessary_to_owned.rs:564:14
|
||||
|
|
||||
LL | s.remove(&"b".to_string());
|
||||
| ^^^^^^^^^^^^^^^^ help: replace it with: `"b"`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> tests/ui/unnecessary_to_owned.rs:550:14
|
||||
--> tests/ui/unnecessary_to_owned.rs:569:14
|
||||
|
|
||||
LL | s.remove(&["b"].to_vec());
|
||||
| ^^^^^^^^^^^^^^^ help: replace it with: `["b"].as_slice()`
|
||||
|
||||
error: unnecessary use of `to_vec`
|
||||
--> tests/ui/unnecessary_to_owned.rs:551:14
|
||||
--> tests/ui/unnecessary_to_owned.rs:570:14
|
||||
|
|
||||
LL | s.remove(&(&["b"]).to_vec());
|
||||
| ^^^^^^^^^^^^^^^^^^ help: replace it with: `(&["b"]).as_slice()`
|
||||
|
||||
error: aborting due to 85 previous errors
|
||||
error: aborting due to 88 previous errors
|
||||
|
||||
|
|
|
|||
|
|
@ -204,6 +204,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass {
|
||||
use super::*;
|
||||
|
||||
|
|
@ -212,6 +213,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass_inside_function {
|
||||
fn with_super_inside_function() {
|
||||
use super::*;
|
||||
|
|
@ -219,6 +221,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass_further_inside {
|
||||
fn insidefoo() {}
|
||||
mod inner {
|
||||
|
|
|
|||
|
|
@ -205,6 +205,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass {
|
||||
use super::*;
|
||||
|
||||
|
|
@ -213,6 +214,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass_inside_function {
|
||||
fn with_super_inside_function() {
|
||||
use super::*;
|
||||
|
|
@ -220,6 +222,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass_further_inside {
|
||||
fn insidefoo() {}
|
||||
mod inner {
|
||||
|
|
|
|||
|
|
@ -106,31 +106,31 @@ LL | use super::*;
|
|||
| ^^^^^^^^ help: try: `super::foofoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports.rs:236:17
|
||||
--> tests/ui/wildcard_imports.rs:239:17
|
||||
|
|
||||
LL | use super::*;
|
||||
| ^^^^^^^^ help: try: `super::insidefoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports.rs:244:13
|
||||
--> tests/ui/wildcard_imports.rs:247:13
|
||||
|
|
||||
LL | use crate::super_imports::*;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `crate::super_imports::foofoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports.rs:253:17
|
||||
--> tests/ui/wildcard_imports.rs:256:17
|
||||
|
|
||||
LL | use super::super::*;
|
||||
| ^^^^^^^^^^^^^^^ help: try: `super::super::foofoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports.rs:262:13
|
||||
--> tests/ui/wildcard_imports.rs:265:13
|
||||
|
|
||||
LL | use super::super::super_imports::*;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `super::super::super_imports::foofoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports.rs:270:13
|
||||
--> tests/ui/wildcard_imports.rs:273:13
|
||||
|
|
||||
LL | use super::*;
|
||||
| ^^^^^^^^ help: try: `super::foofoo`
|
||||
|
|
|
|||
|
|
@ -198,6 +198,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass {
|
||||
use super::*;
|
||||
|
||||
|
|
@ -206,6 +207,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass_inside_function {
|
||||
fn with_super_inside_function() {
|
||||
use super::*;
|
||||
|
|
@ -213,6 +215,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass_further_inside {
|
||||
fn insidefoo() {}
|
||||
mod inner {
|
||||
|
|
|
|||
|
|
@ -106,31 +106,31 @@ LL | use super::*;
|
|||
| ^^^^^^^^ help: try: `super::foofoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports_2021.rs:230:17
|
||||
--> tests/ui/wildcard_imports_2021.rs:233:17
|
||||
|
|
||||
LL | use super::*;
|
||||
| ^^^^^^^^ help: try: `super::insidefoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports_2021.rs:238:13
|
||||
--> tests/ui/wildcard_imports_2021.rs:241:13
|
||||
|
|
||||
LL | use crate::super_imports::*;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `crate::super_imports::foofoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports_2021.rs:247:17
|
||||
--> tests/ui/wildcard_imports_2021.rs:250:17
|
||||
|
|
||||
LL | use super::super::*;
|
||||
| ^^^^^^^^^^^^^^^ help: try: `super::super::foofoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports_2021.rs:256:13
|
||||
--> tests/ui/wildcard_imports_2021.rs:259:13
|
||||
|
|
||||
LL | use super::super::super_imports::*;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `super::super::super_imports::foofoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports_2021.rs:264:13
|
||||
--> tests/ui/wildcard_imports_2021.rs:267:13
|
||||
|
|
||||
LL | use super::*;
|
||||
| ^^^^^^^^ help: try: `super::foofoo`
|
||||
|
|
|
|||
|
|
@ -198,6 +198,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass {
|
||||
use super::*;
|
||||
|
||||
|
|
@ -206,6 +207,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass_inside_function {
|
||||
fn with_super_inside_function() {
|
||||
use super::*;
|
||||
|
|
@ -213,6 +215,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass_further_inside {
|
||||
fn insidefoo() {}
|
||||
mod inner {
|
||||
|
|
|
|||
|
|
@ -106,31 +106,31 @@ LL | use super::*;
|
|||
| ^^^^^^^^ help: try: `super::foofoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports_2021.rs:230:17
|
||||
--> tests/ui/wildcard_imports_2021.rs:233:17
|
||||
|
|
||||
LL | use super::*;
|
||||
| ^^^^^^^^ help: try: `super::insidefoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports_2021.rs:238:13
|
||||
--> tests/ui/wildcard_imports_2021.rs:241:13
|
||||
|
|
||||
LL | use crate::super_imports::*;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: try: `crate::super_imports::foofoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports_2021.rs:247:17
|
||||
--> tests/ui/wildcard_imports_2021.rs:250:17
|
||||
|
|
||||
LL | use super::super::*;
|
||||
| ^^^^^^^^^^^^^^^ help: try: `super::super::foofoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports_2021.rs:256:13
|
||||
--> tests/ui/wildcard_imports_2021.rs:259:13
|
||||
|
|
||||
LL | use super::super::super_imports::*;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `super::super::super_imports::foofoo`
|
||||
|
||||
error: usage of wildcard import
|
||||
--> tests/ui/wildcard_imports_2021.rs:264:13
|
||||
--> tests/ui/wildcard_imports_2021.rs:267:13
|
||||
|
|
||||
LL | use super::*;
|
||||
| ^^^^^^^^ help: try: `super::foofoo`
|
||||
|
|
|
|||
|
|
@ -199,6 +199,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass {
|
||||
use super::*;
|
||||
|
||||
|
|
@ -207,6 +208,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass_inside_function {
|
||||
fn with_super_inside_function() {
|
||||
use super::*;
|
||||
|
|
@ -214,6 +216,7 @@ mod super_imports {
|
|||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test_should_pass_further_inside {
|
||||
fn insidefoo() {}
|
||||
mod inner {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue