mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-24 05:33:27 +00:00
Auto merge of #10802 - flip1995:rustup, r=flip1995
Rustup r? `@ghost` changelog: none
This commit is contained in:
commit
435a8ad86c
32 changed files with 151 additions and 855 deletions
|
@ -134,12 +134,8 @@ pub(crate) static LINTS: &[&crate::LintInfo] = &[
|
||||||
crate::doc::NEEDLESS_DOCTEST_MAIN_INFO,
|
crate::doc::NEEDLESS_DOCTEST_MAIN_INFO,
|
||||||
crate::doc::UNNECESSARY_SAFETY_DOC_INFO,
|
crate::doc::UNNECESSARY_SAFETY_DOC_INFO,
|
||||||
crate::double_parens::DOUBLE_PARENS_INFO,
|
crate::double_parens::DOUBLE_PARENS_INFO,
|
||||||
crate::drop_forget_ref::DROP_COPY_INFO,
|
|
||||||
crate::drop_forget_ref::DROP_NON_DROP_INFO,
|
crate::drop_forget_ref::DROP_NON_DROP_INFO,
|
||||||
crate::drop_forget_ref::DROP_REF_INFO,
|
|
||||||
crate::drop_forget_ref::FORGET_COPY_INFO,
|
|
||||||
crate::drop_forget_ref::FORGET_NON_DROP_INFO,
|
crate::drop_forget_ref::FORGET_NON_DROP_INFO,
|
||||||
crate::drop_forget_ref::FORGET_REF_INFO,
|
|
||||||
crate::drop_forget_ref::UNDROPPED_MANUALLY_DROPS_INFO,
|
crate::drop_forget_ref::UNDROPPED_MANUALLY_DROPS_INFO,
|
||||||
crate::duplicate_mod::DUPLICATE_MOD_INFO,
|
crate::duplicate_mod::DUPLICATE_MOD_INFO,
|
||||||
crate::else_if_without_else::ELSE_IF_WITHOUT_ELSE_INFO,
|
crate::else_if_without_else::ELSE_IF_WITHOUT_ELSE_INFO,
|
||||||
|
|
|
@ -1424,6 +1424,7 @@ fn ty_auto_deref_stability<'tcx>(
|
||||||
continue;
|
continue;
|
||||||
},
|
},
|
||||||
ty::Param(_) => TyPosition::new_deref_stable_for_result(precedence, ty),
|
ty::Param(_) => TyPosition::new_deref_stable_for_result(precedence, ty),
|
||||||
|
ty::Alias(ty::Inherent, _) => unreachable!("inherent projection should have been normalized away above"),
|
||||||
ty::Alias(ty::Projection, _) if ty.has_non_region_param() => {
|
ty::Alias(ty::Projection, _) if ty.has_non_region_param() => {
|
||||||
TyPosition::new_deref_stable_for_result(precedence, ty)
|
TyPosition::new_deref_stable_for_result(precedence, ty)
|
||||||
},
|
},
|
||||||
|
|
|
@ -7,102 +7,6 @@ use rustc_lint::{LateContext, LateLintPass};
|
||||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
use rustc_span::sym;
|
use rustc_span::sym;
|
||||||
|
|
||||||
declare_clippy_lint! {
|
|
||||||
/// ### What it does
|
|
||||||
/// Checks for calls to `std::mem::drop` with a reference
|
|
||||||
/// instead of an owned value.
|
|
||||||
///
|
|
||||||
/// ### Why is this bad?
|
|
||||||
/// Calling `drop` on a reference will only drop the
|
|
||||||
/// reference itself, which is a no-op. It will not call the `drop` method (from
|
|
||||||
/// the `Drop` trait implementation) on the underlying referenced value, which
|
|
||||||
/// is likely what was intended.
|
|
||||||
///
|
|
||||||
/// ### Example
|
|
||||||
/// ```ignore
|
|
||||||
/// let mut lock_guard = mutex.lock();
|
|
||||||
/// std::mem::drop(&lock_guard) // Should have been drop(lock_guard), mutex
|
|
||||||
/// // still locked
|
|
||||||
/// operation_that_requires_mutex_to_be_unlocked();
|
|
||||||
/// ```
|
|
||||||
#[clippy::version = "pre 1.29.0"]
|
|
||||||
pub DROP_REF,
|
|
||||||
correctness,
|
|
||||||
"calls to `std::mem::drop` with a reference instead of an owned value"
|
|
||||||
}
|
|
||||||
|
|
||||||
declare_clippy_lint! {
|
|
||||||
/// ### What it does
|
|
||||||
/// Checks for calls to `std::mem::forget` with a reference
|
|
||||||
/// instead of an owned value.
|
|
||||||
///
|
|
||||||
/// ### Why is this bad?
|
|
||||||
/// Calling `forget` on a reference will only forget the
|
|
||||||
/// reference itself, which is a no-op. It will not forget the underlying
|
|
||||||
/// referenced
|
|
||||||
/// value, which is likely what was intended.
|
|
||||||
///
|
|
||||||
/// ### Example
|
|
||||||
/// ```rust
|
|
||||||
/// let x = Box::new(1);
|
|
||||||
/// std::mem::forget(&x) // Should have been forget(x), x will still be dropped
|
|
||||||
/// ```
|
|
||||||
#[clippy::version = "pre 1.29.0"]
|
|
||||||
pub FORGET_REF,
|
|
||||||
correctness,
|
|
||||||
"calls to `std::mem::forget` with a reference instead of an owned value"
|
|
||||||
}
|
|
||||||
|
|
||||||
declare_clippy_lint! {
|
|
||||||
/// ### What it does
|
|
||||||
/// Checks for calls to `std::mem::drop` with a value
|
|
||||||
/// that derives the Copy trait
|
|
||||||
///
|
|
||||||
/// ### Why is this bad?
|
|
||||||
/// Calling `std::mem::drop` [does nothing for types that
|
|
||||||
/// implement Copy](https://doc.rust-lang.org/std/mem/fn.drop.html), since the
|
|
||||||
/// value will be copied and moved into the function on invocation.
|
|
||||||
///
|
|
||||||
/// ### Example
|
|
||||||
/// ```rust
|
|
||||||
/// let x: i32 = 42; // i32 implements Copy
|
|
||||||
/// std::mem::drop(x) // A copy of x is passed to the function, leaving the
|
|
||||||
/// // original unaffected
|
|
||||||
/// ```
|
|
||||||
#[clippy::version = "pre 1.29.0"]
|
|
||||||
pub DROP_COPY,
|
|
||||||
correctness,
|
|
||||||
"calls to `std::mem::drop` with a value that implements Copy"
|
|
||||||
}
|
|
||||||
|
|
||||||
declare_clippy_lint! {
|
|
||||||
/// ### What it does
|
|
||||||
/// Checks for calls to `std::mem::forget` with a value that
|
|
||||||
/// derives the Copy trait
|
|
||||||
///
|
|
||||||
/// ### Why is this bad?
|
|
||||||
/// Calling `std::mem::forget` [does nothing for types that
|
|
||||||
/// implement Copy](https://doc.rust-lang.org/std/mem/fn.drop.html) since the
|
|
||||||
/// value will be copied and moved into the function on invocation.
|
|
||||||
///
|
|
||||||
/// An alternative, but also valid, explanation is that Copy types do not
|
|
||||||
/// implement
|
|
||||||
/// the Drop trait, which means they have no destructors. Without a destructor,
|
|
||||||
/// there
|
|
||||||
/// is nothing for `std::mem::forget` to ignore.
|
|
||||||
///
|
|
||||||
/// ### Example
|
|
||||||
/// ```rust
|
|
||||||
/// let x: i32 = 42; // i32 implements Copy
|
|
||||||
/// std::mem::forget(x) // A copy of x is passed to the function, leaving the
|
|
||||||
/// // original unaffected
|
|
||||||
/// ```
|
|
||||||
#[clippy::version = "pre 1.29.0"]
|
|
||||||
pub FORGET_COPY,
|
|
||||||
correctness,
|
|
||||||
"calls to `std::mem::forget` with a value that implements Copy"
|
|
||||||
}
|
|
||||||
|
|
||||||
declare_clippy_lint! {
|
declare_clippy_lint! {
|
||||||
/// ### What it does
|
/// ### What it does
|
||||||
/// Checks for calls to `std::mem::drop` with a value that does not implement `Drop`.
|
/// Checks for calls to `std::mem::drop` with a value that does not implement `Drop`.
|
||||||
|
@ -172,24 +76,12 @@ declare_clippy_lint! {
|
||||||
"use of safe `std::mem::drop` function to drop a std::mem::ManuallyDrop, which will not drop the inner value"
|
"use of safe `std::mem::drop` function to drop a std::mem::ManuallyDrop, which will not drop the inner value"
|
||||||
}
|
}
|
||||||
|
|
||||||
const DROP_REF_SUMMARY: &str = "calls to `std::mem::drop` with a reference instead of an owned value. \
|
|
||||||
Dropping a reference does nothing";
|
|
||||||
const FORGET_REF_SUMMARY: &str = "calls to `std::mem::forget` with a reference instead of an owned value. \
|
|
||||||
Forgetting a reference does nothing";
|
|
||||||
const DROP_COPY_SUMMARY: &str = "calls to `std::mem::drop` with a value that implements `Copy`. \
|
|
||||||
Dropping a copy leaves the original intact";
|
|
||||||
const FORGET_COPY_SUMMARY: &str = "calls to `std::mem::forget` with a value that implements `Copy`. \
|
|
||||||
Forgetting a copy leaves the original intact";
|
|
||||||
const DROP_NON_DROP_SUMMARY: &str = "call to `std::mem::drop` with a value that does not implement `Drop`. \
|
const DROP_NON_DROP_SUMMARY: &str = "call to `std::mem::drop` with a value that does not implement `Drop`. \
|
||||||
Dropping such a type only extends its contained lifetimes";
|
Dropping such a type only extends its contained lifetimes";
|
||||||
const FORGET_NON_DROP_SUMMARY: &str = "call to `std::mem::forget` with a value that does not implement `Drop`. \
|
const FORGET_NON_DROP_SUMMARY: &str = "call to `std::mem::forget` with a value that does not implement `Drop`. \
|
||||||
Forgetting such a type is the same as dropping it";
|
Forgetting such a type is the same as dropping it";
|
||||||
|
|
||||||
declare_lint_pass!(DropForgetRef => [
|
declare_lint_pass!(DropForgetRef => [
|
||||||
DROP_REF,
|
|
||||||
FORGET_REF,
|
|
||||||
DROP_COPY,
|
|
||||||
FORGET_COPY,
|
|
||||||
DROP_NON_DROP,
|
DROP_NON_DROP,
|
||||||
FORGET_NON_DROP,
|
FORGET_NON_DROP,
|
||||||
UNDROPPED_MANUALLY_DROPS
|
UNDROPPED_MANUALLY_DROPS
|
||||||
|
@ -206,10 +98,11 @@ impl<'tcx> LateLintPass<'tcx> for DropForgetRef {
|
||||||
let is_copy = is_copy(cx, arg_ty);
|
let is_copy = is_copy(cx, arg_ty);
|
||||||
let drop_is_single_call_in_arm = is_single_call_in_arm(cx, arg, expr);
|
let drop_is_single_call_in_arm = is_single_call_in_arm(cx, arg, expr);
|
||||||
let (lint, msg) = match fn_name {
|
let (lint, msg) = match fn_name {
|
||||||
sym::mem_drop if arg_ty.is_ref() && !drop_is_single_call_in_arm => (DROP_REF, DROP_REF_SUMMARY),
|
// early return for uplifted lints: drop_ref, drop_copy, forget_ref, forget_copy
|
||||||
sym::mem_forget if arg_ty.is_ref() => (FORGET_REF, FORGET_REF_SUMMARY),
|
sym::mem_drop if arg_ty.is_ref() && !drop_is_single_call_in_arm => return,
|
||||||
sym::mem_drop if is_copy && !drop_is_single_call_in_arm => (DROP_COPY, DROP_COPY_SUMMARY),
|
sym::mem_forget if arg_ty.is_ref() => return,
|
||||||
sym::mem_forget if is_copy => (FORGET_COPY, FORGET_COPY_SUMMARY),
|
sym::mem_drop if is_copy && !drop_is_single_call_in_arm => return,
|
||||||
|
sym::mem_forget if is_copy => return,
|
||||||
sym::mem_drop if is_type_lang_item(cx, arg_ty, LangItem::ManuallyDrop) => {
|
sym::mem_drop if is_type_lang_item(cx, arg_ty, LangItem::ManuallyDrop) => {
|
||||||
span_lint_and_help(
|
span_lint_and_help(
|
||||||
cx,
|
cx,
|
||||||
|
|
|
@ -392,7 +392,7 @@ pub fn read_conf(sess: &Session, path: &io::Result<(Option<PathBuf>, Vec<String>
|
||||||
conf
|
conf
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default)] //~ ERROR no such field
|
#[derive(Default)]
|
||||||
struct RegistrationGroups {
|
struct RegistrationGroups {
|
||||||
all: Vec<LintId>,
|
all: Vec<LintId>,
|
||||||
cargo: Vec<LintId>,
|
cargo: Vec<LintId>,
|
||||||
|
|
|
@ -282,7 +282,7 @@ impl<'a> NormalizedPat<'a> {
|
||||||
// TODO: Handle negative integers. They're currently treated as a wild match.
|
// TODO: Handle negative integers. They're currently treated as a wild match.
|
||||||
ExprKind::Lit(lit) => match lit.node {
|
ExprKind::Lit(lit) => match lit.node {
|
||||||
LitKind::Str(sym, _) => Self::LitStr(sym),
|
LitKind::Str(sym, _) => Self::LitStr(sym),
|
||||||
LitKind::ByteStr(ref bytes, _) => Self::LitBytes(bytes),
|
LitKind::ByteStr(ref bytes, _) | LitKind::CStr(ref bytes, _) => Self::LitBytes(bytes),
|
||||||
LitKind::Byte(val) => Self::LitInt(val.into()),
|
LitKind::Byte(val) => Self::LitInt(val.into()),
|
||||||
LitKind::Char(val) => Self::LitInt(val.into()),
|
LitKind::Char(val) => Self::LitInt(val.into()),
|
||||||
LitKind::Int(val, _) => Self::LitInt(val),
|
LitKind::Int(val, _) => Self::LitInt(val),
|
||||||
|
|
|
@ -344,10 +344,11 @@ fn is_pat_variant(cx: &LateContext<'_>, pat: &Pat<'_>, path: &QPath<'_>, expecte
|
||||||
let Some(id) = cx.typeck_results().qpath_res(path, pat.hir_id).opt_def_id() else { return false };
|
let Some(id) = cx.typeck_results().qpath_res(path, pat.hir_id).opt_def_id() else { return false };
|
||||||
|
|
||||||
match expected_item {
|
match expected_item {
|
||||||
Item::Lang(expected_lang_item) => {
|
Item::Lang(expected_lang_item) => cx
|
||||||
let expected_id = cx.tcx.lang_items().require(expected_lang_item).unwrap();
|
.tcx
|
||||||
cx.tcx.parent(id) == expected_id
|
.lang_items()
|
||||||
},
|
.get(expected_lang_item)
|
||||||
|
.map_or(false, |expected_id| cx.tcx.parent(id) == expected_id),
|
||||||
Item::Diag(expected_ty, expected_variant) => {
|
Item::Diag(expected_ty, expected_variant) => {
|
||||||
let ty = cx.typeck_results().pat_ty(pat);
|
let ty = cx.typeck_results().pat_ty(pat);
|
||||||
|
|
||||||
|
|
|
@ -385,6 +385,9 @@ fn can_change_type<'a>(cx: &LateContext<'a>, mut expr: &'a Expr<'a>, mut ty: Ty<
|
||||||
Node::Expr(parent_expr) => {
|
Node::Expr(parent_expr) => {
|
||||||
if let Some((callee_def_id, call_substs, recv, call_args)) = get_callee_substs_and_args(cx, parent_expr)
|
if let Some((callee_def_id, call_substs, recv, call_args)) = get_callee_substs_and_args(cx, parent_expr)
|
||||||
{
|
{
|
||||||
|
// FIXME: the `subst_identity()` below seems incorrect, since we eventually
|
||||||
|
// call `tcx.try_subst_and_normalize_erasing_regions` further down
|
||||||
|
// (i.e., we are explicitly not in the identity context).
|
||||||
let fn_sig = cx.tcx.fn_sig(callee_def_id).subst_identity().skip_binder();
|
let fn_sig = cx.tcx.fn_sig(callee_def_id).subst_identity().skip_binder();
|
||||||
if let Some(arg_index) = recv.into_iter().chain(call_args).position(|arg| arg.hir_id == expr.hir_id)
|
if let Some(arg_index) = recv.into_iter().chain(call_args).position(|arg| arg.hir_id == expr.hir_id)
|
||||||
&& let Some(param_ty) = fn_sig.inputs().get(arg_index)
|
&& let Some(param_ty) = fn_sig.inputs().get(arg_index)
|
||||||
|
@ -435,7 +438,7 @@ fn can_change_type<'a>(cx: &LateContext<'a>, mut expr: &'a Expr<'a>, mut ty: Ty<
|
||||||
let output_ty = fn_sig.output();
|
let output_ty = fn_sig.output();
|
||||||
if output_ty.contains(*param_ty) {
|
if output_ty.contains(*param_ty) {
|
||||||
if let Ok(new_ty) = cx.tcx.try_subst_and_normalize_erasing_regions(
|
if let Ok(new_ty) = cx.tcx.try_subst_and_normalize_erasing_regions(
|
||||||
new_subst, cx.param_env, output_ty) {
|
new_subst, cx.param_env, EarlyBinder(output_ty)) {
|
||||||
expr = parent_expr;
|
expr = parent_expr;
|
||||||
ty = new_ty;
|
ty = new_ty;
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -33,9 +33,13 @@ pub static RENAMED_LINTS: &[(&str, &str)] = &[
|
||||||
("clippy::zero_width_space", "clippy::invisible_characters"),
|
("clippy::zero_width_space", "clippy::invisible_characters"),
|
||||||
("clippy::clone_double_ref", "suspicious_double_ref_op"),
|
("clippy::clone_double_ref", "suspicious_double_ref_op"),
|
||||||
("clippy::drop_bounds", "drop_bounds"),
|
("clippy::drop_bounds", "drop_bounds"),
|
||||||
|
("clippy::drop_copy", "drop_copy"),
|
||||||
|
("clippy::drop_ref", "drop_ref"),
|
||||||
("clippy::for_loop_over_option", "for_loops_over_fallibles"),
|
("clippy::for_loop_over_option", "for_loops_over_fallibles"),
|
||||||
("clippy::for_loop_over_result", "for_loops_over_fallibles"),
|
("clippy::for_loop_over_result", "for_loops_over_fallibles"),
|
||||||
("clippy::for_loops_over_fallibles", "for_loops_over_fallibles"),
|
("clippy::for_loops_over_fallibles", "for_loops_over_fallibles"),
|
||||||
|
("clippy::forget_copy", "forget_copy"),
|
||||||
|
("clippy::forget_ref", "forget_ref"),
|
||||||
("clippy::into_iter_on_array", "array_into_iter"),
|
("clippy::into_iter_on_array", "array_into_iter"),
|
||||||
("clippy::invalid_atomic_ordering", "invalid_atomic_ordering"),
|
("clippy::invalid_atomic_ordering", "invalid_atomic_ordering"),
|
||||||
("clippy::invalid_ref", "invalid_value"),
|
("clippy::invalid_ref", "invalid_value"),
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
use clippy_utils::diagnostics::span_lint_and_sugg;
|
use clippy_utils::diagnostics::span_lint_and_sugg;
|
||||||
use clippy_utils::source::snippet_with_context;
|
use clippy_utils::source::snippet_with_context;
|
||||||
use clippy_utils::ty::is_type_diagnostic_item;
|
use clippy_utils::ty::{is_type_diagnostic_item, is_type_lang_item};
|
||||||
use clippy_utils::visitors::is_expr_unsafe;
|
use clippy_utils::visitors::is_expr_unsafe;
|
||||||
use clippy_utils::{get_parent_node, match_libc_symbol};
|
use clippy_utils::{get_parent_node, match_libc_symbol};
|
||||||
use if_chain::if_chain;
|
use if_chain::if_chain;
|
||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
use rustc_hir::{Block, BlockCheckMode, Expr, ExprKind, Node, UnsafeSource};
|
use rustc_hir::{Block, BlockCheckMode, Expr, ExprKind, LangItem, Node, UnsafeSource};
|
||||||
use rustc_lint::{LateContext, LateLintPass};
|
use rustc_lint::{LateContext, LateLintPass};
|
||||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
use rustc_span::symbol::sym;
|
use rustc_span::symbol::sym;
|
||||||
|
@ -67,7 +67,7 @@ impl<'tcx> LateLintPass<'tcx> for StrlenOnCStrings {
|
||||||
let val_name = snippet_with_context(cx, self_arg.span, ctxt, "..", &mut app).0;
|
let val_name = snippet_with_context(cx, self_arg.span, ctxt, "..", &mut app).0;
|
||||||
let method_name = if is_type_diagnostic_item(cx, ty, sym::cstring_type) {
|
let method_name = if is_type_diagnostic_item(cx, ty, sym::cstring_type) {
|
||||||
"as_bytes"
|
"as_bytes"
|
||||||
} else if is_type_diagnostic_item(cx, ty, sym::CStr) {
|
} else if is_type_lang_item(cx, ty, LangItem::CStr) {
|
||||||
"to_bytes"
|
"to_bytes"
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -304,6 +304,11 @@ impl<'a, 'tcx> PrintVisitor<'a, 'tcx> {
|
||||||
kind!("ByteStr(ref {vec})");
|
kind!("ByteStr(ref {vec})");
|
||||||
chain!(self, "let [{:?}] = **{vec}", vec.value);
|
chain!(self, "let [{:?}] = **{vec}", vec.value);
|
||||||
},
|
},
|
||||||
|
LitKind::CStr(ref vec, _) => {
|
||||||
|
bind!(self, vec);
|
||||||
|
kind!("CStr(ref {vec})");
|
||||||
|
chain!(self, "let [{:?}] = **{vec}", vec.value);
|
||||||
|
},
|
||||||
LitKind::Str(s, _) => {
|
LitKind::Str(s, _) => {
|
||||||
bind!(self, s);
|
bind!(self, s);
|
||||||
kind!("Str({s}, _)");
|
kind!("Str({s}, _)");
|
||||||
|
|
|
@ -213,7 +213,7 @@ pub fn lit_to_mir_constant(lit: &LitKind, ty: Option<Ty<'_>>) -> Constant {
|
||||||
match *lit {
|
match *lit {
|
||||||
LitKind::Str(ref is, _) => Constant::Str(is.to_string()),
|
LitKind::Str(ref is, _) => Constant::Str(is.to_string()),
|
||||||
LitKind::Byte(b) => Constant::Int(u128::from(b)),
|
LitKind::Byte(b) => Constant::Int(u128::from(b)),
|
||||||
LitKind::ByteStr(ref s, _) => Constant::Binary(Lrc::clone(s)),
|
LitKind::ByteStr(ref s, _) | LitKind::CStr(ref s, _) => Constant::Binary(Lrc::clone(s)),
|
||||||
LitKind::Char(c) => Constant::Char(c),
|
LitKind::Char(c) => Constant::Char(c),
|
||||||
LitKind::Int(n, _) => Constant::Int(n),
|
LitKind::Int(n, _) => Constant::Int(n),
|
||||||
LitKind::Float(ref is, LitFloatType::Suffixed(fty)) => match fty {
|
LitKind::Float(ref is, LitFloatType::Suffixed(fty)) => match fty {
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
[toolchain]
|
[toolchain]
|
||||||
channel = "nightly-2023-05-05"
|
channel = "nightly-2023-05-20"
|
||||||
components = ["cargo", "llvm-tools", "rust-src", "rust-std", "rustc", "rustc-dev", "rustfmt"]
|
components = ["cargo", "llvm-tools", "rust-src", "rust-std", "rustc", "rustc-dev", "rustfmt"]
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
// FIXME: switch to something more ergonomic here, once available.
|
// FIXME: switch to something more ergonomic here, once available.
|
||||||
// (Currently there is no way to opt into sysroot crates without `extern crate`.)
|
// (Currently there is no way to opt into sysroot crates without `extern crate`.)
|
||||||
extern crate rustc_driver;
|
extern crate rustc_driver;
|
||||||
extern crate rustc_errors;
|
|
||||||
extern crate rustc_interface;
|
extern crate rustc_interface;
|
||||||
extern crate rustc_session;
|
extern crate rustc_session;
|
||||||
extern crate rustc_span;
|
extern crate rustc_span;
|
||||||
|
@ -20,13 +19,10 @@ use rustc_interface::interface;
|
||||||
use rustc_session::parse::ParseSess;
|
use rustc_session::parse::ParseSess;
|
||||||
use rustc_span::symbol::Symbol;
|
use rustc_span::symbol::Symbol;
|
||||||
|
|
||||||
use std::borrow::Cow;
|
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
use std::panic;
|
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use std::sync::LazyLock;
|
|
||||||
|
|
||||||
/// If a command-line option matches `find_arg`, then apply the predicate `pred` on its value. If
|
/// If a command-line option matches `find_arg`, then apply the predicate `pred` on its value. If
|
||||||
/// true, then return it. The parameter is assumed to be either `--arg=value` or `--arg value`.
|
/// true, then return it. The parameter is assumed to be either `--arg=value` or `--arg value`.
|
||||||
|
@ -198,66 +194,18 @@ You can use tool lints to allow or deny lints from your code, eg.:
|
||||||
|
|
||||||
const BUG_REPORT_URL: &str = "https://github.com/rust-lang/rust-clippy/issues/new";
|
const BUG_REPORT_URL: &str = "https://github.com/rust-lang/rust-clippy/issues/new";
|
||||||
|
|
||||||
type PanicCallback = dyn Fn(&panic::PanicInfo<'_>) + Sync + Send + 'static;
|
|
||||||
static ICE_HOOK: LazyLock<Box<PanicCallback>> = LazyLock::new(|| {
|
|
||||||
let hook = panic::take_hook();
|
|
||||||
panic::set_hook(Box::new(|info| report_clippy_ice(info, BUG_REPORT_URL)));
|
|
||||||
hook
|
|
||||||
});
|
|
||||||
|
|
||||||
fn report_clippy_ice(info: &panic::PanicInfo<'_>, bug_report_url: &str) {
|
|
||||||
// Invoke our ICE handler, which prints the actual panic message and optionally a backtrace
|
|
||||||
(*ICE_HOOK)(info);
|
|
||||||
|
|
||||||
// Separate the output with an empty line
|
|
||||||
eprintln!();
|
|
||||||
|
|
||||||
let fallback_bundle = rustc_errors::fallback_fluent_bundle(rustc_driver::DEFAULT_LOCALE_RESOURCES.to_vec(), false);
|
|
||||||
let emitter = Box::new(rustc_errors::emitter::EmitterWriter::stderr(
|
|
||||||
rustc_errors::ColorConfig::Auto,
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
fallback_bundle,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
None,
|
|
||||||
false,
|
|
||||||
false,
|
|
||||||
rustc_errors::TerminalUrl::No,
|
|
||||||
));
|
|
||||||
let handler = rustc_errors::Handler::with_emitter(true, None, emitter);
|
|
||||||
|
|
||||||
// a .span_bug or .bug call has already printed what
|
|
||||||
// it wants to print.
|
|
||||||
if !info.payload().is::<rustc_errors::ExplicitBug>() {
|
|
||||||
let mut d = rustc_errors::Diagnostic::new(rustc_errors::Level::Bug, "unexpected panic");
|
|
||||||
handler.emit_diagnostic(&mut d);
|
|
||||||
}
|
|
||||||
|
|
||||||
let version_info = rustc_tools_util::get_version_info!();
|
|
||||||
|
|
||||||
let xs: Vec<Cow<'static, str>> = vec![
|
|
||||||
"the compiler unexpectedly panicked. this is a bug.".into(),
|
|
||||||
format!("we would appreciate a bug report: {bug_report_url}").into(),
|
|
||||||
format!("Clippy version: {version_info}").into(),
|
|
||||||
];
|
|
||||||
|
|
||||||
for note in &xs {
|
|
||||||
handler.note_without_error(note.as_ref());
|
|
||||||
}
|
|
||||||
|
|
||||||
// If backtraces are enabled, also print the query stack
|
|
||||||
let backtrace = env::var_os("RUST_BACKTRACE").map_or(false, |x| &x != "0");
|
|
||||||
|
|
||||||
let num_frames = if backtrace { None } else { Some(2) };
|
|
||||||
|
|
||||||
interface::try_print_query_stack(&handler, num_frames);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(clippy::too_many_lines)]
|
#[allow(clippy::too_many_lines)]
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
rustc_driver::init_rustc_env_logger();
|
rustc_driver::init_rustc_env_logger();
|
||||||
LazyLock::force(&ICE_HOOK);
|
|
||||||
|
rustc_driver::install_ice_hook(BUG_REPORT_URL, |handler| {
|
||||||
|
// FIXME: this macro calls unwrap internally but is called in a panicking context! It's not
|
||||||
|
// as simple as moving the call from the hook to main, because `install_ice_hook` doesn't
|
||||||
|
// accept a generic closure.
|
||||||
|
let version_info = rustc_tools_util::get_version_info!();
|
||||||
|
handler.note_without_error(format!("Clippy version: {version_info}"));
|
||||||
|
});
|
||||||
|
|
||||||
exit(rustc_driver::catch_with_exit_code(move || {
|
exit(rustc_driver::catch_with_exit_code(move || {
|
||||||
let mut orig_args: Vec<String> = env::args().collect();
|
let mut orig_args: Vec<String> = env::args().collect();
|
||||||
let has_sysroot_arg = arg_value(&orig_args, "--sysroot", |_| true).is_some();
|
let has_sysroot_arg = arg_value(&orig_args, "--sysroot", |_| true).is_some();
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
//@normalize-stderr-test: "produce_ice.rs:\d*:\d*" -> "produce_ice.rs"
|
//@normalize-stderr-test: "produce_ice.rs:\d*:\d*" -> "produce_ice.rs"
|
||||||
//@normalize-stderr-test: "', .*clippy_lints" -> "', clippy_lints"
|
//@normalize-stderr-test: "', .*clippy_lints" -> "', clippy_lints"
|
||||||
//@normalize-stderr-test: "'rustc'" -> "'<unnamed>'"
|
//@normalize-stderr-test: "'rustc'" -> "'<unnamed>'"
|
||||||
|
//@normalize-stderr-test: "running on .*" -> "running on <target>"
|
||||||
//@normalize-stderr-test: "(?ms)query stack during panic:\n.*end of query stack\n" -> ""
|
//@normalize-stderr-test: "(?ms)query stack during panic:\n.*end of query stack\n" -> ""
|
||||||
|
|
||||||
#![deny(clippy::internal)]
|
#![deny(clippy::internal)]
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
thread '<unnamed>' panicked at 'Would you like some help with that?', clippy_lints/src/utils/internal_lints/produce_ice.rs
|
thread '<unnamed>' panicked at 'Would you like some help with that?', clippy_lints/src/utils/internal_lints/produce_ice.rs
|
||||||
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
|
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
|
||||||
|
|
||||||
error: internal compiler error: unexpected panic
|
error: the compiler unexpectedly panicked. this is a bug.
|
||||||
|
|
||||||
note: the compiler unexpectedly panicked. this is a bug.
|
|
||||||
|
|
||||||
note: we would appreciate a bug report: https://github.com/rust-lang/rust-clippy/issues/new
|
note: we would appreciate a bug report: https://github.com/rust-lang/rust-clippy/issues/new
|
||||||
|
|
||||||
|
note: rustc 1.71.0-nightly (521f4dae1 2023-05-19) running on <target>
|
||||||
|
|
||||||
|
note: compiler flags: -C prefer-dynamic -Z ui-testing
|
||||||
|
|
||||||
note: Clippy version: foo
|
note: Clippy version: foo
|
||||||
|
|
||||||
thread panicked while panicking. aborting.
|
thread panicked while panicking. aborting.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
//@run-rustfix
|
//@run-rustfix
|
||||||
#![warn(clippy::box_default)]
|
#![warn(clippy::box_default)]
|
||||||
#![allow(unused, clippy::default_constructed_unit_structs)]
|
#![allow(clippy::default_constructed_unit_structs)]
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
struct ImplementsDefault;
|
struct ImplementsDefault;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
//@run-rustfix
|
//@run-rustfix
|
||||||
#![warn(clippy::box_default)]
|
#![warn(clippy::box_default)]
|
||||||
#![allow(unused, clippy::default_constructed_unit_structs)]
|
#![allow(clippy::default_constructed_unit_structs)]
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
struct ImplementsDefault;
|
struct ImplementsDefault;
|
||||||
|
|
|
@ -30,19 +30,11 @@ error: sub-expression diverges
|
||||||
LL | 3 => true || diverge(),
|
LL | 3 => true || diverge(),
|
||||||
| ^^^^^^^^^
|
| ^^^^^^^^^
|
||||||
|
|
||||||
error: sub-expression diverges
|
|
||||||
--> $DIR/diverging_sub_expression.rs:36:30
|
|
||||||
|
|
|
||||||
LL | _ => true || panic!("boo"),
|
|
||||||
| ^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
= note: this error originates in the macro `$crate::panic::panic_2021` which comes from the expansion of the macro `panic` (in Nightly builds, run with -Z macro-backtrace for more info)
|
|
||||||
|
|
||||||
error: sub-expression diverges
|
error: sub-expression diverges
|
||||||
--> $DIR/diverging_sub_expression.rs:38:26
|
--> $DIR/diverging_sub_expression.rs:38:26
|
||||||
|
|
|
|
||||||
LL | _ => true || break,
|
LL | _ => true || break,
|
||||||
| ^^^^^
|
| ^^^^^
|
||||||
|
|
||||||
error: aborting due to 7 previous errors
|
error: aborting due to 6 previous errors
|
||||||
|
|
||||||
|
|
|
@ -1,86 +0,0 @@
|
||||||
#![warn(clippy::drop_copy, clippy::forget_copy)]
|
|
||||||
#![allow(clippy::toplevel_ref_arg, clippy::drop_ref, clippy::forget_ref, unused_mut)]
|
|
||||||
|
|
||||||
use std::mem::{drop, forget};
|
|
||||||
use std::vec::Vec;
|
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
|
||||||
struct SomeStruct;
|
|
||||||
|
|
||||||
struct AnotherStruct {
|
|
||||||
x: u8,
|
|
||||||
y: u8,
|
|
||||||
z: Vec<u8>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Clone for AnotherStruct {
|
|
||||||
fn clone(&self) -> AnotherStruct {
|
|
||||||
AnotherStruct {
|
|
||||||
x: self.x,
|
|
||||||
y: self.y,
|
|
||||||
z: self.z.clone(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
let s1 = SomeStruct {};
|
|
||||||
let s2 = s1;
|
|
||||||
let s3 = &s1;
|
|
||||||
let mut s4 = s1;
|
|
||||||
let ref s5 = s1;
|
|
||||||
|
|
||||||
drop(s1);
|
|
||||||
drop(s2);
|
|
||||||
drop(s3);
|
|
||||||
drop(s4);
|
|
||||||
drop(s5);
|
|
||||||
|
|
||||||
forget(s1);
|
|
||||||
forget(s2);
|
|
||||||
forget(s3);
|
|
||||||
forget(s4);
|
|
||||||
forget(s5);
|
|
||||||
|
|
||||||
let a1 = AnotherStruct {
|
|
||||||
x: 255,
|
|
||||||
y: 0,
|
|
||||||
z: vec![1, 2, 3],
|
|
||||||
};
|
|
||||||
let a2 = &a1;
|
|
||||||
let mut a3 = a1.clone();
|
|
||||||
let ref a4 = a1;
|
|
||||||
let a5 = a1.clone();
|
|
||||||
|
|
||||||
drop(a2);
|
|
||||||
drop(a3);
|
|
||||||
drop(a4);
|
|
||||||
drop(a5);
|
|
||||||
|
|
||||||
forget(a2);
|
|
||||||
let a3 = &a1;
|
|
||||||
forget(a3);
|
|
||||||
forget(a4);
|
|
||||||
let a5 = a1.clone();
|
|
||||||
forget(a5);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
#[allow(clippy::unit_cmp)]
|
|
||||||
fn issue9482(x: u8) {
|
|
||||||
fn println_and<T>(t: T) -> T {
|
|
||||||
println!("foo");
|
|
||||||
t
|
|
||||||
}
|
|
||||||
|
|
||||||
match x {
|
|
||||||
0 => drop(println_and(12)), // Don't lint (copy type), we only care about side-effects
|
|
||||||
1 => drop(println_and(String::new())), // Don't lint (no copy type), we only care about side-effects
|
|
||||||
2 => {
|
|
||||||
drop(println_and(13)); // Lint, even if we only care about the side-effect, it's already in a block
|
|
||||||
},
|
|
||||||
3 if drop(println_and(14)) == () => (), // Lint, idiomatic use is only in body of `Arm`
|
|
||||||
4 => drop(2), // Lint, not a fn/method call
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,112 +0,0 @@
|
||||||
error: calls to `std::mem::drop` with a value that implements `Copy`. Dropping a copy leaves the original intact
|
|
||||||
--> $DIR/drop_forget_copy.rs:33:5
|
|
||||||
|
|
|
||||||
LL | drop(s1);
|
|
||||||
| ^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `SomeStruct`
|
|
||||||
--> $DIR/drop_forget_copy.rs:33:10
|
|
||||||
|
|
|
||||||
LL | drop(s1);
|
|
||||||
| ^^
|
|
||||||
= note: `-D clippy::drop-copy` implied by `-D warnings`
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a value that implements `Copy`. Dropping a copy leaves the original intact
|
|
||||||
--> $DIR/drop_forget_copy.rs:34:5
|
|
||||||
|
|
|
||||||
LL | drop(s2);
|
|
||||||
| ^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `SomeStruct`
|
|
||||||
--> $DIR/drop_forget_copy.rs:34:10
|
|
||||||
|
|
|
||||||
LL | drop(s2);
|
|
||||||
| ^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a value that implements `Copy`. Dropping a copy leaves the original intact
|
|
||||||
--> $DIR/drop_forget_copy.rs:36:5
|
|
||||||
|
|
|
||||||
LL | drop(s4);
|
|
||||||
| ^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `SomeStruct`
|
|
||||||
--> $DIR/drop_forget_copy.rs:36:10
|
|
||||||
|
|
|
||||||
LL | drop(s4);
|
|
||||||
| ^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::forget` with a value that implements `Copy`. Forgetting a copy leaves the original intact
|
|
||||||
--> $DIR/drop_forget_copy.rs:39:5
|
|
||||||
|
|
|
||||||
LL | forget(s1);
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `SomeStruct`
|
|
||||||
--> $DIR/drop_forget_copy.rs:39:12
|
|
||||||
|
|
|
||||||
LL | forget(s1);
|
|
||||||
| ^^
|
|
||||||
= note: `-D clippy::forget-copy` implied by `-D warnings`
|
|
||||||
|
|
||||||
error: calls to `std::mem::forget` with a value that implements `Copy`. Forgetting a copy leaves the original intact
|
|
||||||
--> $DIR/drop_forget_copy.rs:40:5
|
|
||||||
|
|
|
||||||
LL | forget(s2);
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `SomeStruct`
|
|
||||||
--> $DIR/drop_forget_copy.rs:40:12
|
|
||||||
|
|
|
||||||
LL | forget(s2);
|
|
||||||
| ^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::forget` with a value that implements `Copy`. Forgetting a copy leaves the original intact
|
|
||||||
--> $DIR/drop_forget_copy.rs:42:5
|
|
||||||
|
|
|
||||||
LL | forget(s4);
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `SomeStruct`
|
|
||||||
--> $DIR/drop_forget_copy.rs:42:12
|
|
||||||
|
|
|
||||||
LL | forget(s4);
|
|
||||||
| ^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a value that implements `Copy`. Dropping a copy leaves the original intact
|
|
||||||
--> $DIR/drop_forget_copy.rs:80:13
|
|
||||||
|
|
|
||||||
LL | drop(println_and(13)); // Lint, even if we only care about the side-effect, it's already in a block
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `i32`
|
|
||||||
--> $DIR/drop_forget_copy.rs:80:18
|
|
||||||
|
|
|
||||||
LL | drop(println_and(13)); // Lint, even if we only care about the side-effect, it's already in a block
|
|
||||||
| ^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a value that implements `Copy`. Dropping a copy leaves the original intact
|
|
||||||
--> $DIR/drop_forget_copy.rs:82:14
|
|
||||||
|
|
|
||||||
LL | 3 if drop(println_and(14)) == () => (), // Lint, idiomatic use is only in body of `Arm`
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `i32`
|
|
||||||
--> $DIR/drop_forget_copy.rs:82:19
|
|
||||||
|
|
|
||||||
LL | 3 if drop(println_and(14)) == () => (), // Lint, idiomatic use is only in body of `Arm`
|
|
||||||
| ^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a value that implements `Copy`. Dropping a copy leaves the original intact
|
|
||||||
--> $DIR/drop_forget_copy.rs:83:14
|
|
||||||
|
|
|
||||||
LL | 4 => drop(2), // Lint, not a fn/method call
|
|
||||||
| ^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `i32`
|
|
||||||
--> $DIR/drop_forget_copy.rs:83:19
|
|
||||||
|
|
|
||||||
LL | 4 => drop(2), // Lint, not a fn/method call
|
|
||||||
| ^
|
|
||||||
|
|
||||||
error: aborting due to 9 previous errors
|
|
||||||
|
|
|
@ -1,97 +0,0 @@
|
||||||
#![warn(clippy::drop_ref)]
|
|
||||||
#![allow(clippy::toplevel_ref_arg)]
|
|
||||||
#![allow(clippy::map_err_ignore)]
|
|
||||||
#![allow(clippy::unnecessary_wraps, clippy::drop_non_drop)]
|
|
||||||
|
|
||||||
use std::mem::drop;
|
|
||||||
|
|
||||||
struct SomeStruct;
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
drop(&SomeStruct);
|
|
||||||
|
|
||||||
let mut owned1 = SomeStruct;
|
|
||||||
drop(&owned1);
|
|
||||||
drop(&&owned1);
|
|
||||||
drop(&mut owned1);
|
|
||||||
drop(owned1); //OK
|
|
||||||
|
|
||||||
let reference1 = &SomeStruct;
|
|
||||||
drop(reference1);
|
|
||||||
|
|
||||||
let reference2 = &mut SomeStruct;
|
|
||||||
drop(reference2);
|
|
||||||
|
|
||||||
let ref reference3 = SomeStruct;
|
|
||||||
drop(reference3);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
fn test_generic_fn_drop<T>(val: T) {
|
|
||||||
drop(&val);
|
|
||||||
drop(val); //OK
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
fn test_similarly_named_function() {
|
|
||||||
fn drop<T>(_val: T) {}
|
|
||||||
drop(&SomeStruct); //OK; call to unrelated function which happens to have the same name
|
|
||||||
std::mem::drop(&SomeStruct);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
|
||||||
pub struct Error;
|
|
||||||
fn produce_half_owl_error() -> Result<(), Error> {
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn produce_half_owl_ok() -> Result<bool, ()> {
|
|
||||||
Ok(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
fn test_owl_result() -> Result<(), ()> {
|
|
||||||
produce_half_owl_error().map_err(|_| ())?;
|
|
||||||
produce_half_owl_ok().map(|_| ())?;
|
|
||||||
// the following should not be linted,
|
|
||||||
// we should not force users to use toilet closures
|
|
||||||
// to produce owl results when drop is more convenient
|
|
||||||
produce_half_owl_error().map_err(drop)?;
|
|
||||||
produce_half_owl_ok().map_err(drop)?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
fn test_owl_result_2() -> Result<u8, ()> {
|
|
||||||
produce_half_owl_error().map_err(|_| ())?;
|
|
||||||
produce_half_owl_ok().map(|_| ())?;
|
|
||||||
// the following should not be linted,
|
|
||||||
// we should not force users to use toilet closures
|
|
||||||
// to produce owl results when drop is more convenient
|
|
||||||
produce_half_owl_error().map_err(drop)?;
|
|
||||||
produce_half_owl_ok().map(drop)?;
|
|
||||||
Ok(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(unused)]
|
|
||||||
#[allow(clippy::unit_cmp)]
|
|
||||||
fn issue10122(x: u8) {
|
|
||||||
// This is a function which returns a reference and has a side-effect, which means
|
|
||||||
// that calling drop() on the function is considered an idiomatic way of achieving the side-effect
|
|
||||||
// in a match arm.
|
|
||||||
fn println_and<T>(t: &T) -> &T {
|
|
||||||
println!("foo");
|
|
||||||
t
|
|
||||||
}
|
|
||||||
|
|
||||||
match x {
|
|
||||||
0 => drop(println_and(&12)), // Don't lint (copy type), we only care about side-effects
|
|
||||||
1 => drop(println_and(&String::new())), // Don't lint (no copy type), we only care about side-effects
|
|
||||||
2 => {
|
|
||||||
drop(println_and(&13)); // Lint, even if we only care about the side-effect, it's already in a block
|
|
||||||
},
|
|
||||||
3 if drop(println_and(&14)) == () => (), // Lint, idiomatic use is only in body of `Arm`
|
|
||||||
4 => drop(&2), // Lint, not a fn/method call
|
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,147 +0,0 @@
|
||||||
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing
|
|
||||||
--> $DIR/drop_ref.rs:11:5
|
|
||||||
|
|
|
||||||
LL | drop(&SomeStruct);
|
|
||||||
| ^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&SomeStruct`
|
|
||||||
--> $DIR/drop_ref.rs:11:10
|
|
||||||
|
|
|
||||||
LL | drop(&SomeStruct);
|
|
||||||
| ^^^^^^^^^^^
|
|
||||||
= note: `-D clippy::drop-ref` implied by `-D warnings`
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing
|
|
||||||
--> $DIR/drop_ref.rs:14:5
|
|
||||||
|
|
|
||||||
LL | drop(&owned1);
|
|
||||||
| ^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&SomeStruct`
|
|
||||||
--> $DIR/drop_ref.rs:14:10
|
|
||||||
|
|
|
||||||
LL | drop(&owned1);
|
|
||||||
| ^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing
|
|
||||||
--> $DIR/drop_ref.rs:15:5
|
|
||||||
|
|
|
||||||
LL | drop(&&owned1);
|
|
||||||
| ^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&&SomeStruct`
|
|
||||||
--> $DIR/drop_ref.rs:15:10
|
|
||||||
|
|
|
||||||
LL | drop(&&owned1);
|
|
||||||
| ^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing
|
|
||||||
--> $DIR/drop_ref.rs:16:5
|
|
||||||
|
|
|
||||||
LL | drop(&mut owned1);
|
|
||||||
| ^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&mut SomeStruct`
|
|
||||||
--> $DIR/drop_ref.rs:16:10
|
|
||||||
|
|
|
||||||
LL | drop(&mut owned1);
|
|
||||||
| ^^^^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing
|
|
||||||
--> $DIR/drop_ref.rs:20:5
|
|
||||||
|
|
|
||||||
LL | drop(reference1);
|
|
||||||
| ^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&SomeStruct`
|
|
||||||
--> $DIR/drop_ref.rs:20:10
|
|
||||||
|
|
|
||||||
LL | drop(reference1);
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing
|
|
||||||
--> $DIR/drop_ref.rs:23:5
|
|
||||||
|
|
|
||||||
LL | drop(reference2);
|
|
||||||
| ^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&mut SomeStruct`
|
|
||||||
--> $DIR/drop_ref.rs:23:10
|
|
||||||
|
|
|
||||||
LL | drop(reference2);
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing
|
|
||||||
--> $DIR/drop_ref.rs:26:5
|
|
||||||
|
|
|
||||||
LL | drop(reference3);
|
|
||||||
| ^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&SomeStruct`
|
|
||||||
--> $DIR/drop_ref.rs:26:10
|
|
||||||
|
|
|
||||||
LL | drop(reference3);
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing
|
|
||||||
--> $DIR/drop_ref.rs:31:5
|
|
||||||
|
|
|
||||||
LL | drop(&val);
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&T`
|
|
||||||
--> $DIR/drop_ref.rs:31:10
|
|
||||||
|
|
|
||||||
LL | drop(&val);
|
|
||||||
| ^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing
|
|
||||||
--> $DIR/drop_ref.rs:39:5
|
|
||||||
|
|
|
||||||
LL | std::mem::drop(&SomeStruct);
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&SomeStruct`
|
|
||||||
--> $DIR/drop_ref.rs:39:20
|
|
||||||
|
|
|
||||||
LL | std::mem::drop(&SomeStruct);
|
|
||||||
| ^^^^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing
|
|
||||||
--> $DIR/drop_ref.rs:91:13
|
|
||||||
|
|
|
||||||
LL | drop(println_and(&13)); // Lint, even if we only care about the side-effect, it's already in a block
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&i32`
|
|
||||||
--> $DIR/drop_ref.rs:91:18
|
|
||||||
|
|
|
||||||
LL | drop(println_and(&13)); // Lint, even if we only care about the side-effect, it's already in a block
|
|
||||||
| ^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing
|
|
||||||
--> $DIR/drop_ref.rs:93:14
|
|
||||||
|
|
|
||||||
LL | 3 if drop(println_and(&14)) == () => (), // Lint, idiomatic use is only in body of `Arm`
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&i32`
|
|
||||||
--> $DIR/drop_ref.rs:93:19
|
|
||||||
|
|
|
||||||
LL | 3 if drop(println_and(&14)) == () => (), // Lint, idiomatic use is only in body of `Arm`
|
|
||||||
| ^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing
|
|
||||||
--> $DIR/drop_ref.rs:94:14
|
|
||||||
|
|
|
||||||
LL | 4 => drop(&2), // Lint, not a fn/method call
|
|
||||||
| ^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&i32`
|
|
||||||
--> $DIR/drop_ref.rs:94:19
|
|
||||||
|
|
|
||||||
LL | 4 => drop(&2), // Lint, not a fn/method call
|
|
||||||
| ^^
|
|
||||||
|
|
||||||
error: aborting due to 12 previous errors
|
|
||||||
|
|
|
@ -1,50 +0,0 @@
|
||||||
#![warn(clippy::forget_ref)]
|
|
||||||
#![allow(clippy::toplevel_ref_arg)]
|
|
||||||
#![allow(clippy::unnecessary_wraps, clippy::forget_non_drop)]
|
|
||||||
#![allow(clippy::borrow_deref_ref)]
|
|
||||||
|
|
||||||
use std::mem::forget;
|
|
||||||
|
|
||||||
struct SomeStruct;
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
forget(&SomeStruct);
|
|
||||||
|
|
||||||
let mut owned = SomeStruct;
|
|
||||||
forget(&owned);
|
|
||||||
forget(&&owned);
|
|
||||||
forget(&mut owned);
|
|
||||||
forget(owned); //OK
|
|
||||||
|
|
||||||
let reference1 = &SomeStruct;
|
|
||||||
forget(&*reference1);
|
|
||||||
|
|
||||||
let reference2 = &mut SomeStruct;
|
|
||||||
forget(reference2);
|
|
||||||
|
|
||||||
let ref reference3 = SomeStruct;
|
|
||||||
forget(reference3);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
fn test_generic_fn_forget<T>(val: T) {
|
|
||||||
forget(&val);
|
|
||||||
forget(val); //OK
|
|
||||||
}
|
|
||||||
|
|
||||||
#[allow(dead_code)]
|
|
||||||
fn test_similarly_named_function() {
|
|
||||||
fn forget<T>(_val: T) {}
|
|
||||||
forget(&SomeStruct); //OK; call to unrelated function which happens to have the same name
|
|
||||||
std::mem::forget(&SomeStruct);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
|
||||||
pub struct Error;
|
|
||||||
fn produce_half_owl_error() -> Result<(), Error> {
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn produce_half_owl_ok() -> Result<bool, ()> {
|
|
||||||
Ok(true)
|
|
||||||
}
|
|
|
@ -1,111 +0,0 @@
|
||||||
error: calls to `std::mem::forget` with a reference instead of an owned value. Forgetting a reference does nothing
|
|
||||||
--> $DIR/forget_ref.rs:11:5
|
|
||||||
|
|
|
||||||
LL | forget(&SomeStruct);
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&SomeStruct`
|
|
||||||
--> $DIR/forget_ref.rs:11:12
|
|
||||||
|
|
|
||||||
LL | forget(&SomeStruct);
|
|
||||||
| ^^^^^^^^^^^
|
|
||||||
= note: `-D clippy::forget-ref` implied by `-D warnings`
|
|
||||||
|
|
||||||
error: calls to `std::mem::forget` with a reference instead of an owned value. Forgetting a reference does nothing
|
|
||||||
--> $DIR/forget_ref.rs:14:5
|
|
||||||
|
|
|
||||||
LL | forget(&owned);
|
|
||||||
| ^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&SomeStruct`
|
|
||||||
--> $DIR/forget_ref.rs:14:12
|
|
||||||
|
|
|
||||||
LL | forget(&owned);
|
|
||||||
| ^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::forget` with a reference instead of an owned value. Forgetting a reference does nothing
|
|
||||||
--> $DIR/forget_ref.rs:15:5
|
|
||||||
|
|
|
||||||
LL | forget(&&owned);
|
|
||||||
| ^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&&SomeStruct`
|
|
||||||
--> $DIR/forget_ref.rs:15:12
|
|
||||||
|
|
|
||||||
LL | forget(&&owned);
|
|
||||||
| ^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::forget` with a reference instead of an owned value. Forgetting a reference does nothing
|
|
||||||
--> $DIR/forget_ref.rs:16:5
|
|
||||||
|
|
|
||||||
LL | forget(&mut owned);
|
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&mut SomeStruct`
|
|
||||||
--> $DIR/forget_ref.rs:16:12
|
|
||||||
|
|
|
||||||
LL | forget(&mut owned);
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::forget` with a reference instead of an owned value. Forgetting a reference does nothing
|
|
||||||
--> $DIR/forget_ref.rs:20:5
|
|
||||||
|
|
|
||||||
LL | forget(&*reference1);
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&SomeStruct`
|
|
||||||
--> $DIR/forget_ref.rs:20:12
|
|
||||||
|
|
|
||||||
LL | forget(&*reference1);
|
|
||||||
| ^^^^^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::forget` with a reference instead of an owned value. Forgetting a reference does nothing
|
|
||||||
--> $DIR/forget_ref.rs:23:5
|
|
||||||
|
|
|
||||||
LL | forget(reference2);
|
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&mut SomeStruct`
|
|
||||||
--> $DIR/forget_ref.rs:23:12
|
|
||||||
|
|
|
||||||
LL | forget(reference2);
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::forget` with a reference instead of an owned value. Forgetting a reference does nothing
|
|
||||||
--> $DIR/forget_ref.rs:26:5
|
|
||||||
|
|
|
||||||
LL | forget(reference3);
|
|
||||||
| ^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&SomeStruct`
|
|
||||||
--> $DIR/forget_ref.rs:26:12
|
|
||||||
|
|
|
||||||
LL | forget(reference3);
|
|
||||||
| ^^^^^^^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::forget` with a reference instead of an owned value. Forgetting a reference does nothing
|
|
||||||
--> $DIR/forget_ref.rs:31:5
|
|
||||||
|
|
|
||||||
LL | forget(&val);
|
|
||||||
| ^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&T`
|
|
||||||
--> $DIR/forget_ref.rs:31:12
|
|
||||||
|
|
|
||||||
LL | forget(&val);
|
|
||||||
| ^^^^
|
|
||||||
|
|
||||||
error: calls to `std::mem::forget` with a reference instead of an owned value. Forgetting a reference does nothing
|
|
||||||
--> $DIR/forget_ref.rs:39:5
|
|
||||||
|
|
|
||||||
LL | std::mem::forget(&SomeStruct);
|
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
|
||||||
note: argument has type `&SomeStruct`
|
|
||||||
--> $DIR/forget_ref.rs:39:22
|
|
||||||
|
|
|
||||||
LL | std::mem::forget(&SomeStruct);
|
|
||||||
| ^^^^^^^^^^^
|
|
||||||
|
|
||||||
error: aborting due to 9 previous errors
|
|
||||||
|
|
13
tests/ui/issue-111399.rs
Normal file
13
tests/ui/issue-111399.rs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#![feature(inherent_associated_types)]
|
||||||
|
#![allow(incomplete_features)]
|
||||||
|
|
||||||
|
// Check that rustc doesn't crash on the trait bound `Self::Ty: std::marker::Freeze`.
|
||||||
|
|
||||||
|
pub struct Struct;
|
||||||
|
|
||||||
|
impl Struct {
|
||||||
|
pub type Ty = usize;
|
||||||
|
pub const CT: Self::Ty = 42;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
|
@ -5,7 +5,7 @@ use std::mem as memstuff;
|
||||||
use std::mem::forget as forgetSomething;
|
use std::mem::forget as forgetSomething;
|
||||||
|
|
||||||
#[warn(clippy::mem_forget)]
|
#[warn(clippy::mem_forget)]
|
||||||
#[allow(clippy::forget_copy)]
|
#[allow(forget_copy)]
|
||||||
fn main() {
|
fn main() {
|
||||||
let five: i32 = 5;
|
let five: i32 = 5;
|
||||||
forgetSomething(five);
|
forgetSomething(five);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#![allow(unused)]
|
#![allow(unused)]
|
||||||
#![allow(deref_nullptr)]
|
#![allow(deref_nullptr)]
|
||||||
#![allow(clippy::unnecessary_operation)]
|
#![allow(clippy::unnecessary_operation)]
|
||||||
#![allow(clippy::drop_copy)]
|
#![allow(drop_copy)]
|
||||||
#![warn(clippy::multiple_unsafe_ops_per_block)]
|
#![warn(clippy::multiple_unsafe_ops_per_block)]
|
||||||
|
|
||||||
extern crate proc_macros;
|
extern crate proc_macros;
|
||||||
|
|
|
@ -30,7 +30,11 @@
|
||||||
#![allow(clippy::invisible_characters)]
|
#![allow(clippy::invisible_characters)]
|
||||||
#![allow(suspicious_double_ref_op)]
|
#![allow(suspicious_double_ref_op)]
|
||||||
#![allow(drop_bounds)]
|
#![allow(drop_bounds)]
|
||||||
|
#![allow(drop_copy)]
|
||||||
|
#![allow(drop_ref)]
|
||||||
#![allow(for_loops_over_fallibles)]
|
#![allow(for_loops_over_fallibles)]
|
||||||
|
#![allow(forget_copy)]
|
||||||
|
#![allow(forget_ref)]
|
||||||
#![allow(array_into_iter)]
|
#![allow(array_into_iter)]
|
||||||
#![allow(invalid_atomic_ordering)]
|
#![allow(invalid_atomic_ordering)]
|
||||||
#![allow(invalid_value)]
|
#![allow(invalid_value)]
|
||||||
|
@ -72,9 +76,13 @@
|
||||||
#![warn(clippy::invisible_characters)]
|
#![warn(clippy::invisible_characters)]
|
||||||
#![warn(suspicious_double_ref_op)]
|
#![warn(suspicious_double_ref_op)]
|
||||||
#![warn(drop_bounds)]
|
#![warn(drop_bounds)]
|
||||||
|
#![warn(drop_copy)]
|
||||||
|
#![warn(drop_ref)]
|
||||||
#![warn(for_loops_over_fallibles)]
|
#![warn(for_loops_over_fallibles)]
|
||||||
#![warn(for_loops_over_fallibles)]
|
#![warn(for_loops_over_fallibles)]
|
||||||
#![warn(for_loops_over_fallibles)]
|
#![warn(for_loops_over_fallibles)]
|
||||||
|
#![warn(forget_copy)]
|
||||||
|
#![warn(forget_ref)]
|
||||||
#![warn(array_into_iter)]
|
#![warn(array_into_iter)]
|
||||||
#![warn(invalid_atomic_ordering)]
|
#![warn(invalid_atomic_ordering)]
|
||||||
#![warn(invalid_value)]
|
#![warn(invalid_value)]
|
||||||
|
|
|
@ -30,7 +30,11 @@
|
||||||
#![allow(clippy::invisible_characters)]
|
#![allow(clippy::invisible_characters)]
|
||||||
#![allow(suspicious_double_ref_op)]
|
#![allow(suspicious_double_ref_op)]
|
||||||
#![allow(drop_bounds)]
|
#![allow(drop_bounds)]
|
||||||
|
#![allow(drop_copy)]
|
||||||
|
#![allow(drop_ref)]
|
||||||
#![allow(for_loops_over_fallibles)]
|
#![allow(for_loops_over_fallibles)]
|
||||||
|
#![allow(forget_copy)]
|
||||||
|
#![allow(forget_ref)]
|
||||||
#![allow(array_into_iter)]
|
#![allow(array_into_iter)]
|
||||||
#![allow(invalid_atomic_ordering)]
|
#![allow(invalid_atomic_ordering)]
|
||||||
#![allow(invalid_value)]
|
#![allow(invalid_value)]
|
||||||
|
@ -72,9 +76,13 @@
|
||||||
#![warn(clippy::zero_width_space)]
|
#![warn(clippy::zero_width_space)]
|
||||||
#![warn(clippy::clone_double_ref)]
|
#![warn(clippy::clone_double_ref)]
|
||||||
#![warn(clippy::drop_bounds)]
|
#![warn(clippy::drop_bounds)]
|
||||||
|
#![warn(clippy::drop_copy)]
|
||||||
|
#![warn(clippy::drop_ref)]
|
||||||
#![warn(clippy::for_loop_over_option)]
|
#![warn(clippy::for_loop_over_option)]
|
||||||
#![warn(clippy::for_loop_over_result)]
|
#![warn(clippy::for_loop_over_result)]
|
||||||
#![warn(clippy::for_loops_over_fallibles)]
|
#![warn(clippy::for_loops_over_fallibles)]
|
||||||
|
#![warn(clippy::forget_copy)]
|
||||||
|
#![warn(clippy::forget_ref)]
|
||||||
#![warn(clippy::into_iter_on_array)]
|
#![warn(clippy::into_iter_on_array)]
|
||||||
#![warn(clippy::invalid_atomic_ordering)]
|
#![warn(clippy::invalid_atomic_ordering)]
|
||||||
#![warn(clippy::invalid_ref)]
|
#![warn(clippy::invalid_ref)]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error: lint `clippy::almost_complete_letter_range` has been renamed to `clippy::almost_complete_range`
|
error: lint `clippy::almost_complete_letter_range` has been renamed to `clippy::almost_complete_range`
|
||||||
--> $DIR/rename.rs:44:9
|
--> $DIR/rename.rs:48:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::almost_complete_letter_range)]
|
LL | #![warn(clippy::almost_complete_letter_range)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::almost_complete_range`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::almost_complete_range`
|
||||||
|
@ -7,262 +7,286 @@ LL | #![warn(clippy::almost_complete_letter_range)]
|
||||||
= note: `-D renamed-and-removed-lints` implied by `-D warnings`
|
= note: `-D renamed-and-removed-lints` implied by `-D warnings`
|
||||||
|
|
||||||
error: lint `clippy::blacklisted_name` has been renamed to `clippy::disallowed_names`
|
error: lint `clippy::blacklisted_name` has been renamed to `clippy::disallowed_names`
|
||||||
--> $DIR/rename.rs:45:9
|
--> $DIR/rename.rs:49:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::blacklisted_name)]
|
LL | #![warn(clippy::blacklisted_name)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::disallowed_names`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::disallowed_names`
|
||||||
|
|
||||||
error: lint `clippy::block_in_if_condition_expr` has been renamed to `clippy::blocks_in_if_conditions`
|
error: lint `clippy::block_in_if_condition_expr` has been renamed to `clippy::blocks_in_if_conditions`
|
||||||
--> $DIR/rename.rs:46:9
|
--> $DIR/rename.rs:50:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::block_in_if_condition_expr)]
|
LL | #![warn(clippy::block_in_if_condition_expr)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::blocks_in_if_conditions`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::blocks_in_if_conditions`
|
||||||
|
|
||||||
error: lint `clippy::block_in_if_condition_stmt` has been renamed to `clippy::blocks_in_if_conditions`
|
error: lint `clippy::block_in_if_condition_stmt` has been renamed to `clippy::blocks_in_if_conditions`
|
||||||
--> $DIR/rename.rs:47:9
|
--> $DIR/rename.rs:51:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::block_in_if_condition_stmt)]
|
LL | #![warn(clippy::block_in_if_condition_stmt)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::blocks_in_if_conditions`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::blocks_in_if_conditions`
|
||||||
|
|
||||||
error: lint `clippy::box_vec` has been renamed to `clippy::box_collection`
|
error: lint `clippy::box_vec` has been renamed to `clippy::box_collection`
|
||||||
--> $DIR/rename.rs:48:9
|
--> $DIR/rename.rs:52:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::box_vec)]
|
LL | #![warn(clippy::box_vec)]
|
||||||
| ^^^^^^^^^^^^^^^ help: use the new name: `clippy::box_collection`
|
| ^^^^^^^^^^^^^^^ help: use the new name: `clippy::box_collection`
|
||||||
|
|
||||||
error: lint `clippy::const_static_lifetime` has been renamed to `clippy::redundant_static_lifetimes`
|
error: lint `clippy::const_static_lifetime` has been renamed to `clippy::redundant_static_lifetimes`
|
||||||
--> $DIR/rename.rs:49:9
|
--> $DIR/rename.rs:53:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::const_static_lifetime)]
|
LL | #![warn(clippy::const_static_lifetime)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::redundant_static_lifetimes`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::redundant_static_lifetimes`
|
||||||
|
|
||||||
error: lint `clippy::cyclomatic_complexity` has been renamed to `clippy::cognitive_complexity`
|
error: lint `clippy::cyclomatic_complexity` has been renamed to `clippy::cognitive_complexity`
|
||||||
--> $DIR/rename.rs:50:9
|
--> $DIR/rename.rs:54:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::cyclomatic_complexity)]
|
LL | #![warn(clippy::cyclomatic_complexity)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::cognitive_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`
|
error: lint `clippy::derive_hash_xor_eq` has been renamed to `clippy::derived_hash_with_manual_eq`
|
||||||
--> $DIR/rename.rs:51:9
|
--> $DIR/rename.rs:55:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::derive_hash_xor_eq)]
|
LL | #![warn(clippy::derive_hash_xor_eq)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::derived_hash_with_manual_eq`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::derived_hash_with_manual_eq`
|
||||||
|
|
||||||
error: lint `clippy::disallowed_method` has been renamed to `clippy::disallowed_methods`
|
error: lint `clippy::disallowed_method` has been renamed to `clippy::disallowed_methods`
|
||||||
--> $DIR/rename.rs:52:9
|
--> $DIR/rename.rs:56:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::disallowed_method)]
|
LL | #![warn(clippy::disallowed_method)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::disallowed_methods`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::disallowed_methods`
|
||||||
|
|
||||||
error: lint `clippy::disallowed_type` has been renamed to `clippy::disallowed_types`
|
error: lint `clippy::disallowed_type` has been renamed to `clippy::disallowed_types`
|
||||||
--> $DIR/rename.rs:53:9
|
--> $DIR/rename.rs:57:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::disallowed_type)]
|
LL | #![warn(clippy::disallowed_type)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::disallowed_types`
|
| ^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::disallowed_types`
|
||||||
|
|
||||||
error: lint `clippy::eval_order_dependence` has been renamed to `clippy::mixed_read_write_in_expression`
|
error: lint `clippy::eval_order_dependence` has been renamed to `clippy::mixed_read_write_in_expression`
|
||||||
--> $DIR/rename.rs:54:9
|
--> $DIR/rename.rs:58:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::eval_order_dependence)]
|
LL | #![warn(clippy::eval_order_dependence)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::mixed_read_write_in_expression`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::mixed_read_write_in_expression`
|
||||||
|
|
||||||
error: lint `clippy::identity_conversion` has been renamed to `clippy::useless_conversion`
|
error: lint `clippy::identity_conversion` has been renamed to `clippy::useless_conversion`
|
||||||
--> $DIR/rename.rs:55:9
|
--> $DIR/rename.rs:59:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::identity_conversion)]
|
LL | #![warn(clippy::identity_conversion)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::useless_conversion`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::useless_conversion`
|
||||||
|
|
||||||
error: lint `clippy::if_let_some_result` has been renamed to `clippy::match_result_ok`
|
error: lint `clippy::if_let_some_result` has been renamed to `clippy::match_result_ok`
|
||||||
--> $DIR/rename.rs:56:9
|
--> $DIR/rename.rs:60:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::if_let_some_result)]
|
LL | #![warn(clippy::if_let_some_result)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::match_result_ok`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::match_result_ok`
|
||||||
|
|
||||||
error: lint `clippy::integer_arithmetic` has been renamed to `clippy::arithmetic_side_effects`
|
error: lint `clippy::integer_arithmetic` has been renamed to `clippy::arithmetic_side_effects`
|
||||||
--> $DIR/rename.rs:57:9
|
--> $DIR/rename.rs:61:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::integer_arithmetic)]
|
LL | #![warn(clippy::integer_arithmetic)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::arithmetic_side_effects`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::arithmetic_side_effects`
|
||||||
|
|
||||||
error: lint `clippy::logic_bug` has been renamed to `clippy::overly_complex_bool_expr`
|
error: lint `clippy::logic_bug` has been renamed to `clippy::overly_complex_bool_expr`
|
||||||
--> $DIR/rename.rs:58:9
|
--> $DIR/rename.rs:62:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::logic_bug)]
|
LL | #![warn(clippy::logic_bug)]
|
||||||
| ^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::overly_complex_bool_expr`
|
| ^^^^^^^^^^^^^^^^^ 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`
|
error: lint `clippy::new_without_default_derive` has been renamed to `clippy::new_without_default`
|
||||||
--> $DIR/rename.rs:59:9
|
--> $DIR/rename.rs:63:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::new_without_default_derive)]
|
LL | #![warn(clippy::new_without_default_derive)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::new_without_default`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 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`
|
error: lint `clippy::option_and_then_some` has been renamed to `clippy::bind_instead_of_map`
|
||||||
--> $DIR/rename.rs:60:9
|
--> $DIR/rename.rs:64:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::option_and_then_some)]
|
LL | #![warn(clippy::option_and_then_some)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::bind_instead_of_map`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::bind_instead_of_map`
|
||||||
|
|
||||||
error: lint `clippy::option_expect_used` has been renamed to `clippy::expect_used`
|
error: lint `clippy::option_expect_used` has been renamed to `clippy::expect_used`
|
||||||
--> $DIR/rename.rs:61:9
|
--> $DIR/rename.rs:65:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::option_expect_used)]
|
LL | #![warn(clippy::option_expect_used)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::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`
|
error: lint `clippy::option_map_unwrap_or` has been renamed to `clippy::map_unwrap_or`
|
||||||
--> $DIR/rename.rs:62:9
|
--> $DIR/rename.rs:66:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::option_map_unwrap_or)]
|
LL | #![warn(clippy::option_map_unwrap_or)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::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`
|
error: lint `clippy::option_map_unwrap_or_else` has been renamed to `clippy::map_unwrap_or`
|
||||||
--> $DIR/rename.rs:63:9
|
--> $DIR/rename.rs:67:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::option_map_unwrap_or_else)]
|
LL | #![warn(clippy::option_map_unwrap_or_else)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::map_unwrap_or`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::map_unwrap_or`
|
||||||
|
|
||||||
error: lint `clippy::option_unwrap_used` has been renamed to `clippy::unwrap_used`
|
error: lint `clippy::option_unwrap_used` has been renamed to `clippy::unwrap_used`
|
||||||
--> $DIR/rename.rs:64:9
|
--> $DIR/rename.rs:68:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::option_unwrap_used)]
|
LL | #![warn(clippy::option_unwrap_used)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::unwrap_used`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::unwrap_used`
|
||||||
|
|
||||||
error: lint `clippy::ref_in_deref` has been renamed to `clippy::needless_borrow`
|
error: lint `clippy::ref_in_deref` has been renamed to `clippy::needless_borrow`
|
||||||
--> $DIR/rename.rs:65:9
|
--> $DIR/rename.rs:69:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::ref_in_deref)]
|
LL | #![warn(clippy::ref_in_deref)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::needless_borrow`
|
| ^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::needless_borrow`
|
||||||
|
|
||||||
error: lint `clippy::result_expect_used` has been renamed to `clippy::expect_used`
|
error: lint `clippy::result_expect_used` has been renamed to `clippy::expect_used`
|
||||||
--> $DIR/rename.rs:66:9
|
--> $DIR/rename.rs:70:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::result_expect_used)]
|
LL | #![warn(clippy::result_expect_used)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::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`
|
error: lint `clippy::result_map_unwrap_or_else` has been renamed to `clippy::map_unwrap_or`
|
||||||
--> $DIR/rename.rs:67:9
|
--> $DIR/rename.rs:71:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::result_map_unwrap_or_else)]
|
LL | #![warn(clippy::result_map_unwrap_or_else)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::map_unwrap_or`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::map_unwrap_or`
|
||||||
|
|
||||||
error: lint `clippy::result_unwrap_used` has been renamed to `clippy::unwrap_used`
|
error: lint `clippy::result_unwrap_used` has been renamed to `clippy::unwrap_used`
|
||||||
--> $DIR/rename.rs:68:9
|
--> $DIR/rename.rs:72:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::result_unwrap_used)]
|
LL | #![warn(clippy::result_unwrap_used)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::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`
|
error: lint `clippy::single_char_push_str` has been renamed to `clippy::single_char_add_str`
|
||||||
--> $DIR/rename.rs:69:9
|
--> $DIR/rename.rs:73:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::single_char_push_str)]
|
LL | #![warn(clippy::single_char_push_str)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::single_char_add_str`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::single_char_add_str`
|
||||||
|
|
||||||
error: lint `clippy::stutter` has been renamed to `clippy::module_name_repetitions`
|
error: lint `clippy::stutter` has been renamed to `clippy::module_name_repetitions`
|
||||||
--> $DIR/rename.rs:70:9
|
--> $DIR/rename.rs:74:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::stutter)]
|
LL | #![warn(clippy::stutter)]
|
||||||
| ^^^^^^^^^^^^^^^ help: use the new name: `clippy::module_name_repetitions`
|
| ^^^^^^^^^^^^^^^ help: use the new name: `clippy::module_name_repetitions`
|
||||||
|
|
||||||
error: lint `clippy::to_string_in_display` has been renamed to `clippy::recursive_format_impl`
|
error: lint `clippy::to_string_in_display` has been renamed to `clippy::recursive_format_impl`
|
||||||
--> $DIR/rename.rs:71:9
|
--> $DIR/rename.rs:75:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::to_string_in_display)]
|
LL | #![warn(clippy::to_string_in_display)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::recursive_format_impl`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::recursive_format_impl`
|
||||||
|
|
||||||
error: lint `clippy::zero_width_space` has been renamed to `clippy::invisible_characters`
|
error: lint `clippy::zero_width_space` has been renamed to `clippy::invisible_characters`
|
||||||
--> $DIR/rename.rs:72:9
|
--> $DIR/rename.rs:76:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::zero_width_space)]
|
LL | #![warn(clippy::zero_width_space)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::invisible_characters`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `clippy::invisible_characters`
|
||||||
|
|
||||||
error: lint `clippy::clone_double_ref` has been renamed to `suspicious_double_ref_op`
|
error: lint `clippy::clone_double_ref` has been renamed to `suspicious_double_ref_op`
|
||||||
--> $DIR/rename.rs:73:9
|
--> $DIR/rename.rs:77:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::clone_double_ref)]
|
LL | #![warn(clippy::clone_double_ref)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `suspicious_double_ref_op`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `suspicious_double_ref_op`
|
||||||
|
|
||||||
error: lint `clippy::drop_bounds` has been renamed to `drop_bounds`
|
error: lint `clippy::drop_bounds` has been renamed to `drop_bounds`
|
||||||
--> $DIR/rename.rs:74:9
|
--> $DIR/rename.rs:78:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::drop_bounds)]
|
LL | #![warn(clippy::drop_bounds)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^ help: use the new name: `drop_bounds`
|
| ^^^^^^^^^^^^^^^^^^^ help: use the new name: `drop_bounds`
|
||||||
|
|
||||||
|
error: lint `clippy::drop_copy` has been renamed to `drop_copy`
|
||||||
|
--> $DIR/rename.rs:79:9
|
||||||
|
|
|
||||||
|
LL | #![warn(clippy::drop_copy)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^ help: use the new name: `drop_copy`
|
||||||
|
|
||||||
|
error: lint `clippy::drop_ref` has been renamed to `drop_ref`
|
||||||
|
--> $DIR/rename.rs:80:9
|
||||||
|
|
|
||||||
|
LL | #![warn(clippy::drop_ref)]
|
||||||
|
| ^^^^^^^^^^^^^^^^ help: use the new name: `drop_ref`
|
||||||
|
|
||||||
error: lint `clippy::for_loop_over_option` has been renamed to `for_loops_over_fallibles`
|
error: lint `clippy::for_loop_over_option` has been renamed to `for_loops_over_fallibles`
|
||||||
--> $DIR/rename.rs:75:9
|
--> $DIR/rename.rs:81:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::for_loop_over_option)]
|
LL | #![warn(clippy::for_loop_over_option)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `for_loops_over_fallibles`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `for_loops_over_fallibles`
|
||||||
|
|
||||||
error: lint `clippy::for_loop_over_result` has been renamed to `for_loops_over_fallibles`
|
error: lint `clippy::for_loop_over_result` has been renamed to `for_loops_over_fallibles`
|
||||||
--> $DIR/rename.rs:76:9
|
--> $DIR/rename.rs:82:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::for_loop_over_result)]
|
LL | #![warn(clippy::for_loop_over_result)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `for_loops_over_fallibles`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `for_loops_over_fallibles`
|
||||||
|
|
||||||
error: lint `clippy::for_loops_over_fallibles` has been renamed to `for_loops_over_fallibles`
|
error: lint `clippy::for_loops_over_fallibles` has been renamed to `for_loops_over_fallibles`
|
||||||
--> $DIR/rename.rs:77:9
|
--> $DIR/rename.rs:83:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::for_loops_over_fallibles)]
|
LL | #![warn(clippy::for_loops_over_fallibles)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `for_loops_over_fallibles`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `for_loops_over_fallibles`
|
||||||
|
|
||||||
|
error: lint `clippy::forget_copy` has been renamed to `forget_copy`
|
||||||
|
--> $DIR/rename.rs:84:9
|
||||||
|
|
|
||||||
|
LL | #![warn(clippy::forget_copy)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^ help: use the new name: `forget_copy`
|
||||||
|
|
||||||
|
error: lint `clippy::forget_ref` has been renamed to `forget_ref`
|
||||||
|
--> $DIR/rename.rs:85:9
|
||||||
|
|
|
||||||
|
LL | #![warn(clippy::forget_ref)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^ help: use the new name: `forget_ref`
|
||||||
|
|
||||||
error: lint `clippy::into_iter_on_array` has been renamed to `array_into_iter`
|
error: lint `clippy::into_iter_on_array` has been renamed to `array_into_iter`
|
||||||
--> $DIR/rename.rs:78:9
|
--> $DIR/rename.rs:86:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::into_iter_on_array)]
|
LL | #![warn(clippy::into_iter_on_array)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `array_into_iter`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `array_into_iter`
|
||||||
|
|
||||||
error: lint `clippy::invalid_atomic_ordering` has been renamed to `invalid_atomic_ordering`
|
error: lint `clippy::invalid_atomic_ordering` has been renamed to `invalid_atomic_ordering`
|
||||||
--> $DIR/rename.rs:79:9
|
--> $DIR/rename.rs:87:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::invalid_atomic_ordering)]
|
LL | #![warn(clippy::invalid_atomic_ordering)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `invalid_atomic_ordering`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `invalid_atomic_ordering`
|
||||||
|
|
||||||
error: lint `clippy::invalid_ref` has been renamed to `invalid_value`
|
error: lint `clippy::invalid_ref` has been renamed to `invalid_value`
|
||||||
--> $DIR/rename.rs:80:9
|
--> $DIR/rename.rs:88:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::invalid_ref)]
|
LL | #![warn(clippy::invalid_ref)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^ help: use the new name: `invalid_value`
|
| ^^^^^^^^^^^^^^^^^^^ help: use the new name: `invalid_value`
|
||||||
|
|
||||||
error: lint `clippy::let_underscore_drop` has been renamed to `let_underscore_drop`
|
error: lint `clippy::let_underscore_drop` has been renamed to `let_underscore_drop`
|
||||||
--> $DIR/rename.rs:81:9
|
--> $DIR/rename.rs:89:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::let_underscore_drop)]
|
LL | #![warn(clippy::let_underscore_drop)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `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`
|
error: lint `clippy::mem_discriminant_non_enum` has been renamed to `enum_intrinsics_non_enums`
|
||||||
--> $DIR/rename.rs:82:9
|
--> $DIR/rename.rs:90:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::mem_discriminant_non_enum)]
|
LL | #![warn(clippy::mem_discriminant_non_enum)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `enum_intrinsics_non_enums`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `enum_intrinsics_non_enums`
|
||||||
|
|
||||||
error: lint `clippy::panic_params` has been renamed to `non_fmt_panics`
|
error: lint `clippy::panic_params` has been renamed to `non_fmt_panics`
|
||||||
--> $DIR/rename.rs:83:9
|
--> $DIR/rename.rs:91:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::panic_params)]
|
LL | #![warn(clippy::panic_params)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ help: use the new name: `non_fmt_panics`
|
| ^^^^^^^^^^^^^^^^^^^^ help: use the new name: `non_fmt_panics`
|
||||||
|
|
||||||
error: lint `clippy::positional_named_format_parameters` has been renamed to `named_arguments_used_positionally`
|
error: lint `clippy::positional_named_format_parameters` has been renamed to `named_arguments_used_positionally`
|
||||||
--> $DIR/rename.rs:84:9
|
--> $DIR/rename.rs:92:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::positional_named_format_parameters)]
|
LL | #![warn(clippy::positional_named_format_parameters)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `named_arguments_used_positionally`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `named_arguments_used_positionally`
|
||||||
|
|
||||||
error: lint `clippy::temporary_cstring_as_ptr` has been renamed to `temporary_cstring_as_ptr`
|
error: lint `clippy::temporary_cstring_as_ptr` has been renamed to `temporary_cstring_as_ptr`
|
||||||
--> $DIR/rename.rs:85:9
|
--> $DIR/rename.rs:93:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::temporary_cstring_as_ptr)]
|
LL | #![warn(clippy::temporary_cstring_as_ptr)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `temporary_cstring_as_ptr`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `temporary_cstring_as_ptr`
|
||||||
|
|
||||||
error: lint `clippy::unknown_clippy_lints` has been renamed to `unknown_lints`
|
error: lint `clippy::unknown_clippy_lints` has been renamed to `unknown_lints`
|
||||||
--> $DIR/rename.rs:86:9
|
--> $DIR/rename.rs:94:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::unknown_clippy_lints)]
|
LL | #![warn(clippy::unknown_clippy_lints)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `unknown_lints`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the new name: `unknown_lints`
|
||||||
|
|
||||||
error: lint `clippy::unused_label` has been renamed to `unused_labels`
|
error: lint `clippy::unused_label` has been renamed to `unused_labels`
|
||||||
--> $DIR/rename.rs:87:9
|
--> $DIR/rename.rs:95:9
|
||||||
|
|
|
|
||||||
LL | #![warn(clippy::unused_label)]
|
LL | #![warn(clippy::unused_label)]
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ help: use the new name: `unused_labels`
|
| ^^^^^^^^^^^^^^^^^^^^ help: use the new name: `unused_labels`
|
||||||
|
|
||||||
error: aborting due to 44 previous errors
|
error: aborting due to 48 previous errors
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
#[warn(clippy::unnecessary_cast)]
|
#[warn(clippy::unnecessary_cast)]
|
||||||
#[warn(clippy::useless_transmute)]
|
#[warn(clippy::useless_transmute)]
|
||||||
// Shouldn't suggest rustc lint name(`dead_code`)
|
// Shouldn't suggest rustc lint name(`dead_code`)
|
||||||
#[warn(clippy::drop_copy)]
|
#[warn(clippy::eq_op)]
|
||||||
// Shouldn't suggest removed/deprecated clippy lint name(`unused_collect`)
|
// Shouldn't suggest removed/deprecated clippy lint name(`unused_collect`)
|
||||||
#[warn(clippy::unused_self)]
|
#[warn(clippy::unused_self)]
|
||||||
// Shouldn't suggest renamed clippy lint name(`const_static_lifetime`)
|
// Shouldn't suggest renamed clippy lint name(`const_static_lifetime`)
|
||||||
|
|
|
@ -34,7 +34,7 @@ error: unknown lint: `clippy::dead_cod`
|
||||||
--> $DIR/unknown_clippy_lints.rs:13:8
|
--> $DIR/unknown_clippy_lints.rs:13:8
|
||||||
|
|
|
|
||||||
LL | #[warn(clippy::dead_cod)]
|
LL | #[warn(clippy::dead_cod)]
|
||||||
| ^^^^^^^^^^^^^^^^ help: did you mean: `clippy::drop_copy`
|
| ^^^^^^^^^^^^^^^^ help: did you mean: `clippy::eq_op`
|
||||||
|
|
||||||
error: unknown lint: `clippy::unused_colle`
|
error: unknown lint: `clippy::unused_colle`
|
||||||
--> $DIR/unknown_clippy_lints.rs:15:8
|
--> $DIR/unknown_clippy_lints.rs:15:8
|
||||||
|
|
Loading…
Reference in a new issue