Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7251,6 +7251,7 @@ Released 2018-09-13
[`needless_lifetimes`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes
[`needless_match`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_match
[`needless_maybe_sized`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_maybe_sized
[`needless_nonzero_get`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_nonzero_get
[`needless_option_as_deref`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_option_as_deref
[`needless_option_take`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_option_take
[`needless_parens_on_range_literals`]: https://rust-lang.github.io/rust-clippy/master/index.html#needless_parens_on_range_literals
Expand Down Expand Up @@ -7566,7 +7567,6 @@ Released 2018-09-13
[`unnecessary_map_or`]: https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_map_or
[`unnecessary_min_or_max`]: https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_min_or_max
[`unnecessary_mut_passed`]: https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_mut_passed
[`unnecessary_nonzero_get`]: https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_nonzero_get
[`unnecessary_operation`]: https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_operation
[`unnecessary_option_map_or_else`]: https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_option_map_or_else
[`unnecessary_owned_empty_strings`]: https://rust-lang.github.io/rust-clippy/master/index.html#unnecessary_owned_empty_strings
Expand Down
2 changes: 1 addition & 1 deletion clippy_lints/src/declared_lints.rs
Original file line number Diff line number Diff line change
Expand Up @@ -572,6 +572,7 @@ pub static LINTS: &[&::declare_clippy_lint::LintInfo] = &[
crate::needless_ifs::NEEDLESS_IFS_INFO,
crate::needless_late_init::NEEDLESS_LATE_INIT_INFO,
crate::needless_maybe_sized::NEEDLESS_MAYBE_SIZED_INFO,
crate::needless_nonzero_get::NEEDLESS_NONZERO_GET_INFO,
crate::needless_parens_on_range_literals::NEEDLESS_PARENS_ON_RANGE_LITERALS_INFO,
crate::needless_pass_by_ref_mut::NEEDLESS_PASS_BY_REF_MUT_INFO,
crate::needless_pass_by_value::NEEDLESS_PASS_BY_VALUE_INFO,
Expand Down Expand Up @@ -787,7 +788,6 @@ pub static LINTS: &[&::declare_clippy_lint::LintInfo] = &[
crate::unnecessary_literal_bound::UNNECESSARY_LITERAL_BOUND_INFO,
crate::unnecessary_map_on_constructor::UNNECESSARY_MAP_ON_CONSTRUCTOR_INFO,
crate::unnecessary_mut_passed::UNNECESSARY_MUT_PASSED_INFO,
crate::unnecessary_nonzero_get::UNNECESSARY_NONZERO_GET_INFO,
crate::unnecessary_owned_empty_strings::UNNECESSARY_OWNED_EMPTY_STRINGS_INFO,
crate::unnecessary_self_imports::UNNECESSARY_SELF_IMPORTS_INFO,
crate::unnecessary_semicolon::UNNECESSARY_SEMICOLON_INFO,
Expand Down
4 changes: 2 additions & 2 deletions clippy_lints/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,7 @@ mod needless_for_each;
mod needless_ifs;
mod needless_late_init;
mod needless_maybe_sized;
mod needless_nonzero_get;
mod needless_parens_on_range_literals;
mod needless_pass_by_ref_mut;
mod needless_pass_by_value;
Expand Down Expand Up @@ -378,7 +379,6 @@ mod unnecessary_box_returns;
mod unnecessary_literal_bound;
mod unnecessary_map_on_constructor;
mod unnecessary_mut_passed;
mod unnecessary_nonzero_get;
mod unnecessary_owned_empty_strings;
mod unnecessary_self_imports;
mod unnecessary_semicolon;
Expand Down Expand Up @@ -868,7 +868,7 @@ rustc_lint::late_lint_methods!(
RestWhenDestructuringStruct: rest_when_destructuring_struct::RestWhenDestructuringStruct = rest_when_destructuring_struct::RestWhenDestructuringStruct,
BlockScrutinee: block_scrutinee::BlockScrutinee = block_scrutinee::BlockScrutinee,
NonnullUncheckedOnBoxPtr: nonnull_unchecked_on_box_ptr::NonnullUncheckedOnBoxPtr = nonnull_unchecked_on_box_ptr::NonnullUncheckedOnBoxPtr::new(conf),
UnnecessaryNonzeroGet: unnecessary_nonzero_get::UnnecessaryNonzeroGet = unnecessary_nonzero_get::UnnecessaryNonzeroGet::new(conf),
NeedlessNonzeroGet: needless_nonzero_get::NeedlessNonzeroGet = needless_nonzero_get::NeedlessNonzeroGet::new(conf),
// add late passes here, used by `cargo dev new_lint`
]]
);
Original file line number Diff line number Diff line change
Expand Up @@ -46,24 +46,24 @@ declare_clippy_lint! {
/// let _ = 4 / nz;
/// ```
#[clippy::version = "1.99.0"]
pub UNNECESSARY_NONZERO_GET,
pub NEEDLESS_NONZERO_GET,
complexity,
"unnecessary `NonZero::get` call"
}

impl_lint_pass!(UnnecessaryNonzeroGet => [UNNECESSARY_NONZERO_GET]);
impl_lint_pass!(NeedlessNonzeroGet => [NEEDLESS_NONZERO_GET]);

pub struct UnnecessaryNonzeroGet {
pub struct NeedlessNonzeroGet {
msrv: Msrv,
}

impl UnnecessaryNonzeroGet {
impl NeedlessNonzeroGet {
pub fn new(conf: &'static Conf) -> Self {
Self { msrv: conf.msrv.into() }
}
}

impl<'tcx> LateLintPass<'tcx> for UnnecessaryNonzeroGet {
impl<'tcx> LateLintPass<'tcx> for NeedlessNonzeroGet {
fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &Expr<'tcx>) {
match expr.kind {
// `<recv>.get().<method>()`
Expand Down Expand Up @@ -155,7 +155,7 @@ fn emit_unnecessary_get<'tcx>(

span_lint_and_then(
cx,
UNNECESSARY_NONZERO_GET,
NEEDLESS_NONZERO_GET,
get_span,
format!("unnecessary `get` before `{operation}`"),
|diag| {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//@aux-build:proc_macros.rs

#![warn(clippy::unnecessary_nonzero_get)]
#![warn(clippy::needless_nonzero_get)]
// the `msrv` functions below deliberately use items newer than their MSRV
#![allow(clippy::incompatible_msrv)]

Expand All @@ -11,83 +11,83 @@ use std::num::{NonZero, NonZeroI32, NonZeroU32};

fn unsigned(nz: NonZero<u32>) {
let _ = nz.leading_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = nz.trailing_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = nz.is_power_of_two();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = nz.ilog2();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = nz.ilog10();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
}

fn signed(nz: NonZero<i32>) {
let _ = nz.leading_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = nz.trailing_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = nz.is_positive();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = nz.is_negative();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
}

fn unsigned_widths(a: NonZero<u8>, b: NonZero<u16>, c: NonZero<u64>, d: NonZero<u128>, e: NonZero<usize>) {
let _ = a.leading_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = b.trailing_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = c.ilog2();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = d.is_power_of_two();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = e.ilog10();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
}

fn signed_widths(f: NonZero<i8>, g: NonZero<i16>, h: NonZero<i64>, i: NonZero<i128>, j: NonZero<isize>) {
let _ = f.is_negative();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = g.is_positive();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = h.leading_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = i.trailing_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = j.leading_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
}

fn aliases_and_receivers(a: NonZeroU32, b: NonZeroI32, r: &NonZero<u32>) {
let _ = a.ilog2();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = b.is_positive();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = r.leading_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get

// more complex receiver expressions
let _ = NonZero::new(5u32).unwrap().leading_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = (a).trailing_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get

// multi-line chain
let _ = a
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
.leading_zeros();
}

fn operators(mut value: u32, other: u32, nz: NonZero<u32>) {
let _ = other / nz;
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = other % nz;
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
value /= nz;
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
value %= nz;
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
}

// The `NonZero` operator implementations carry `#[rustc_const_unstable(feature = "const_ops")]`,
Expand All @@ -100,7 +100,7 @@ const fn const_operators(mut value: u32, nz: NonZero<u32>) -> u32 {
// `NonZero::leading_zeros` is const-stable since 1.53.0, so the `get` can go even in a `const fn`.
const fn const_methods(nz: NonZero<u32>) -> u32 {
nz.leading_zeros()
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
}

fn no_lint(nz: NonZero<u32>, signed: NonZero<i32>, plain: u32) {
Expand Down Expand Up @@ -181,15 +181,15 @@ fn below_msrv(nz: NonZero<u32>) {
#[clippy::msrv = "1.53"]
fn meets_msrv(nz: NonZero<u32>) {
let _ = nz.leading_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
}

// `NonZero::ilog2` was stabilized in 1.67.0, later than `leading_zeros`
#[clippy::msrv = "1.66"]
fn below_ilog2_msrv(nz: NonZero<u32>) {
let _ = nz.get().ilog2();
let _ = nz.leading_zeros();
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
}

// `Div<NonZero<_>>` and `Rem<NonZero<_>>` were stabilized in 1.51.0
Expand All @@ -202,9 +202,9 @@ fn below_nonzero_div_msrv(value: u32, nz: NonZero<u32>) {
#[clippy::msrv = "1.51"]
fn meets_nonzero_div_msrv(value: u32, nz: NonZero<u32>) {
let _ = value / nz;
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
let _ = value % nz;
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
}

// `DivAssign<NonZero<_>>` and `RemAssign<NonZero<_>>` were stabilized in 1.79.0
Expand All @@ -217,9 +217,9 @@ fn below_nonzero_div_assign_msrv(mut value: u32, nz: NonZero<u32>) {
#[clippy::msrv = "1.79"]
fn meets_nonzero_div_assign_msrv(mut value: u32, nz: NonZero<u32>) {
value /= nz;
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
value %= nz;
//~^ unnecessary_nonzero_get
//~^ needless_nonzero_get
}

// The whole expression is written in the macro, so the suggestion would point at code the caller
Expand Down
Loading