Auto merge of #13144 - xFrednet:07797-restriction-and-then-what, r=y21
Make restriction lint's use `span_lint_and_then` (i -> p) This migrates a few restriction lints to use `span_lint_and_then`. This change is motivated by https://github.com/rust-lang/rust-clippy/issues/7797. I've also cleaned up some lint message. Mostly minor stuff. For example: suggestions with a longer message than `"try"` now use `SuggestionStyle::ShowAlways` --- cc: https://github.com/rust-lang/rust-clippy/issues/7797 brother PR of: https://github.com/rust-lang/rust-clippy/pull/13136 changelog: none
This commit is contained in:
commit
345c94c98f
@ -1,6 +1,6 @@
|
|||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
use clippy_utils::diagnostics::span_lint_and_help;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use rustc_ast::ast::{Expr, ExprKind, InlineAsmOptions};
|
use rustc_ast::ast::{Expr, ExprKind, InlineAsmOptions};
|
||||||
use rustc_ast::{InlineAsm, Item, ItemKind};
|
use rustc_ast::{InlineAsm, Item, ItemKind};
|
||||||
use rustc_lint::{EarlyContext, EarlyLintPass, Lint, LintContext};
|
use rustc_lint::{EarlyContext, EarlyLintPass, Lint, LintContext};
|
||||||
@ -49,14 +49,10 @@ fn check_asm_syntax(
|
|||||||
};
|
};
|
||||||
|
|
||||||
if style == check_for {
|
if style == check_for {
|
||||||
span_lint_and_help(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
cx,
|
span_lint_and_then(cx, lint, span, format!("{style} x86 assembly syntax used"), |diag| {
|
||||||
lint,
|
diag.help(format!("use {} x86 assembly syntax", !style));
|
||||||
span,
|
});
|
||||||
format!("{style} x86 assembly syntax used"),
|
|
||||||
None,
|
|
||||||
format!("use {} x86 assembly syntax", !style),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,13 +94,13 @@ fn check_asm_syntax(
|
|||||||
impl EarlyLintPass for InlineAsmX86IntelSyntax {
|
impl EarlyLintPass for InlineAsmX86IntelSyntax {
|
||||||
fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
|
fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
|
||||||
if let ExprKind::InlineAsm(inline_asm) = &expr.kind {
|
if let ExprKind::InlineAsm(inline_asm) = &expr.kind {
|
||||||
check_asm_syntax(Self::get_lints()[0], cx, inline_asm, expr.span, AsmStyle::Intel);
|
check_asm_syntax(INLINE_ASM_X86_INTEL_SYNTAX, cx, inline_asm, expr.span, AsmStyle::Intel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) {
|
fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) {
|
||||||
if let ItemKind::GlobalAsm(inline_asm) = &item.kind {
|
if let ItemKind::GlobalAsm(inline_asm) = &item.kind {
|
||||||
check_asm_syntax(Self::get_lints()[0], cx, inline_asm, item.span, AsmStyle::Intel);
|
check_asm_syntax(INLINE_ASM_X86_INTEL_SYNTAX, cx, inline_asm, item.span, AsmStyle::Intel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -146,13 +142,13 @@ fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) {
|
|||||||
impl EarlyLintPass for InlineAsmX86AttSyntax {
|
impl EarlyLintPass for InlineAsmX86AttSyntax {
|
||||||
fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
|
fn check_expr(&mut self, cx: &EarlyContext<'_>, expr: &Expr) {
|
||||||
if let ExprKind::InlineAsm(inline_asm) = &expr.kind {
|
if let ExprKind::InlineAsm(inline_asm) = &expr.kind {
|
||||||
check_asm_syntax(Self::get_lints()[0], cx, inline_asm, expr.span, AsmStyle::Att);
|
check_asm_syntax(INLINE_ASM_X86_ATT_SYNTAX, cx, inline_asm, expr.span, AsmStyle::Att);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) {
|
fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) {
|
||||||
if let ItemKind::GlobalAsm(inline_asm) = &item.kind {
|
if let ItemKind::GlobalAsm(inline_asm) = &item.kind {
|
||||||
check_asm_syntax(Self::get_lints()[0], cx, inline_asm, item.span, AsmStyle::Att);
|
check_asm_syntax(INLINE_ASM_X86_ATT_SYNTAX, cx, inline_asm, item.span, AsmStyle::Att);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_note;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use clippy_utils::is_must_use_func_call;
|
use clippy_utils::is_must_use_func_call;
|
||||||
use clippy_utils::ty::{is_copy, is_must_use_ty, is_type_lang_item};
|
use clippy_utils::ty::{is_copy, is_must_use_ty, is_type_lang_item};
|
||||||
use rustc_hir::{Arm, Expr, ExprKind, LangItem, Node};
|
use rustc_hir::{Arm, Expr, ExprKind, LangItem, Node};
|
||||||
@ -126,14 +126,14 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
|
|||||||
},
|
},
|
||||||
_ => return,
|
_ => return,
|
||||||
};
|
};
|
||||||
span_lint_and_note(
|
span_lint_and_then(cx, lint, expr.span, msg, |diag| {
|
||||||
cx,
|
let note = format!("argument has type `{arg_ty}`");
|
||||||
lint,
|
if let Some(span) = note_span {
|
||||||
expr.span,
|
diag.span_note(span, note);
|
||||||
msg,
|
} else {
|
||||||
note_span,
|
diag.note(note);
|
||||||
format!("argument has type `{arg_ty}`"),
|
}
|
||||||
);
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_sugg;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use clippy_utils::numeric_literal;
|
use clippy_utils::numeric_literal;
|
||||||
use rustc_ast::ast::{self, LitFloatType, LitKind};
|
use rustc_ast::ast::{self, LitFloatType, LitKind};
|
||||||
use rustc_errors::Applicability;
|
use rustc_errors::{Applicability, SuggestionStyle};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_lint::{LateContext, LateLintPass};
|
use rustc_lint::{LateContext, LateLintPass};
|
||||||
use rustc_middle::ty::{self, FloatTy};
|
use rustc_middle::ty::{self, FloatTy};
|
||||||
@ -105,32 +105,43 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx hir::Expr<'_>) {
|
|||||||
if is_whole && !sym_str.contains(['e', 'E']) {
|
if is_whole && !sym_str.contains(['e', 'E']) {
|
||||||
// Normalize the literal by stripping the fractional portion
|
// Normalize the literal by stripping the fractional portion
|
||||||
if sym_str.split('.').next().unwrap() != float_str {
|
if sym_str.split('.').next().unwrap() != float_str {
|
||||||
|
span_lint_and_then(
|
||||||
|
cx,
|
||||||
|
LOSSY_FLOAT_LITERAL,
|
||||||
|
expr.span,
|
||||||
|
"literal cannot be represented as the underlying type without loss of precision",
|
||||||
|
|diag| {
|
||||||
// If the type suffix is missing the suggestion would be
|
// If the type suffix is missing the suggestion would be
|
||||||
// incorrectly interpreted as an integer so adding a `.0`
|
// incorrectly interpreted as an integer so adding a `.0`
|
||||||
// suffix to prevent that.
|
// suffix to prevent that.
|
||||||
if type_suffix.is_none() {
|
if type_suffix.is_none() {
|
||||||
float_str.push_str(".0");
|
float_str.push_str(".0");
|
||||||
}
|
}
|
||||||
|
diag.span_suggestion_with_style(
|
||||||
span_lint_and_sugg(
|
|
||||||
cx,
|
|
||||||
LOSSY_FLOAT_LITERAL,
|
|
||||||
expr.span,
|
expr.span,
|
||||||
"literal cannot be represented as the underlying type without loss of precision",
|
|
||||||
"consider changing the type or replacing it with",
|
"consider changing the type or replacing it with",
|
||||||
numeric_literal::format(&float_str, type_suffix, true),
|
numeric_literal::format(&float_str, type_suffix, true),
|
||||||
Applicability::MachineApplicable,
|
Applicability::MachineApplicable,
|
||||||
|
SuggestionStyle::ShowAlways,
|
||||||
|
);
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else if digits > max as usize && float_str.len() < sym_str.len() {
|
} else if digits > max as usize && float_str.len() < sym_str.len() {
|
||||||
span_lint_and_sugg(
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
EXCESSIVE_PRECISION,
|
EXCESSIVE_PRECISION,
|
||||||
expr.span,
|
expr.span,
|
||||||
"float has excessive precision",
|
"float has excessive precision",
|
||||||
|
|diag| {
|
||||||
|
diag.span_suggestion_with_style(
|
||||||
|
expr.span,
|
||||||
"consider changing the type or truncating it to",
|
"consider changing the type or truncating it to",
|
||||||
numeric_literal::format(&float_str, type_suffix, true),
|
numeric_literal::format(&float_str, type_suffix, true),
|
||||||
Applicability::MachineApplicable,
|
Applicability::MachineApplicable,
|
||||||
|
SuggestionStyle::ShowAlways,
|
||||||
|
);
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! lint on inherent implementations
|
//! lint on inherent implementations
|
||||||
|
|
||||||
use clippy_utils::diagnostics::span_lint_and_note;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use clippy_utils::is_lint_allowed;
|
use clippy_utils::is_lint_allowed;
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
use rustc_hir::def_id::LocalDefId;
|
use rustc_hir::def_id::LocalDefId;
|
||||||
@ -105,13 +105,14 @@ fn check_crate_post(&mut self, cx: &LateContext<'tcx>) {
|
|||||||
// `TyCtxt::crate_inherent_impls` doesn't have a defined order. Sort the lint output first.
|
// `TyCtxt::crate_inherent_impls` doesn't have a defined order. Sort the lint output first.
|
||||||
lint_spans.sort_by_key(|x| x.0.lo());
|
lint_spans.sort_by_key(|x| x.0.lo());
|
||||||
for (span, first_span) in lint_spans {
|
for (span, first_span) in lint_spans {
|
||||||
span_lint_and_note(
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
MULTIPLE_INHERENT_IMPL,
|
MULTIPLE_INHERENT_IMPL,
|
||||||
span,
|
span,
|
||||||
"multiple implementations of this structure",
|
"multiple implementations of this structure",
|
||||||
Some(first_span),
|
|diag| {
|
||||||
"first implementation here",
|
diag.span_note(first_span, "first implementation here");
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use clippy_config::Conf;
|
use clippy_config::Conf;
|
||||||
use clippy_utils::diagnostics::span_lint_and_note;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use clippy_utils::macros::root_macro_call_first_node;
|
use clippy_utils::macros::root_macro_call_first_node;
|
||||||
use rustc_ast::LitKind;
|
use rustc_ast::LitKind;
|
||||||
use rustc_hir::{Expr, ExprKind};
|
use rustc_hir::{Expr, ExprKind};
|
||||||
@ -66,16 +66,18 @@ fn check_expr(&mut self, cx: &LateContext<'_>, expr: &'_ Expr<'_>) {
|
|||||||
&& (cx.tcx.is_diagnostic_item(sym::include_bytes_macro, macro_call.def_id)
|
&& (cx.tcx.is_diagnostic_item(sym::include_bytes_macro, macro_call.def_id)
|
||||||
|| cx.tcx.is_diagnostic_item(sym::include_str_macro, macro_call.def_id))
|
|| cx.tcx.is_diagnostic_item(sym::include_str_macro, macro_call.def_id))
|
||||||
{
|
{
|
||||||
span_lint_and_note(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
LARGE_INCLUDE_FILE,
|
LARGE_INCLUDE_FILE,
|
||||||
expr.span.source_callsite(),
|
expr.span.source_callsite(),
|
||||||
"attempted to include a large file",
|
"attempted to include a large file",
|
||||||
None,
|
|diag| {
|
||||||
format!(
|
diag.note(format!(
|
||||||
"the configuration allows a maximum size of {} bytes",
|
"the configuration allows a maximum size of {} bytes",
|
||||||
self.max_file_size
|
self.max_file_size
|
||||||
),
|
));
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_help;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use clippy_utils::ty::{implements_trait, is_must_use_ty, match_type};
|
use clippy_utils::ty::{implements_trait, is_must_use_ty, match_type};
|
||||||
use clippy_utils::{is_from_proc_macro, is_must_use_func_call, paths};
|
use clippy_utils::{is_from_proc_macro, is_must_use_func_call, paths};
|
||||||
use rustc_hir::{LetStmt, LocalSource, PatKind};
|
use rustc_hir::{LetStmt, LocalSource, PatKind};
|
||||||
@ -149,43 +149,53 @@ fn check_local(&mut self, cx: &LateContext<'tcx>, local: &LetStmt<'tcx>) {
|
|||||||
GenericArgKind::Lifetime(_) | GenericArgKind::Const(_) => false,
|
GenericArgKind::Lifetime(_) | GenericArgKind::Const(_) => false,
|
||||||
});
|
});
|
||||||
if contains_sync_guard {
|
if contains_sync_guard {
|
||||||
span_lint_and_help(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
LET_UNDERSCORE_LOCK,
|
LET_UNDERSCORE_LOCK,
|
||||||
local.span,
|
local.span,
|
||||||
"non-binding `let` on a synchronization lock",
|
"non-binding `let` on a synchronization lock",
|
||||||
None,
|
|diag| {
|
||||||
|
diag.help(
|
||||||
"consider using an underscore-prefixed named \
|
"consider using an underscore-prefixed named \
|
||||||
binding or dropping explicitly with `std::mem::drop`",
|
binding or dropping explicitly with `std::mem::drop`",
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
} else if let Some(future_trait_def_id) = cx.tcx.lang_items().future_trait()
|
} else if let Some(future_trait_def_id) = cx.tcx.lang_items().future_trait()
|
||||||
&& implements_trait(cx, cx.typeck_results().expr_ty(init), future_trait_def_id, &[])
|
&& implements_trait(cx, cx.typeck_results().expr_ty(init), future_trait_def_id, &[])
|
||||||
{
|
{
|
||||||
span_lint_and_help(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
LET_UNDERSCORE_FUTURE,
|
LET_UNDERSCORE_FUTURE,
|
||||||
local.span,
|
local.span,
|
||||||
"non-binding `let` on a future",
|
"non-binding `let` on a future",
|
||||||
None,
|
|diag| {
|
||||||
"consider awaiting the future or dropping explicitly with `std::mem::drop`",
|
diag.help("consider awaiting the future or dropping explicitly with `std::mem::drop`");
|
||||||
|
},
|
||||||
);
|
);
|
||||||
} else if is_must_use_ty(cx, cx.typeck_results().expr_ty(init)) {
|
} else if is_must_use_ty(cx, cx.typeck_results().expr_ty(init)) {
|
||||||
span_lint_and_help(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
LET_UNDERSCORE_MUST_USE,
|
LET_UNDERSCORE_MUST_USE,
|
||||||
local.span,
|
local.span,
|
||||||
"non-binding `let` on an expression with `#[must_use]` type",
|
"non-binding `let` on an expression with `#[must_use]` type",
|
||||||
None,
|
|diag| {
|
||||||
"consider explicitly using expression value",
|
diag.help("consider explicitly using expression value");
|
||||||
|
},
|
||||||
);
|
);
|
||||||
} else if is_must_use_func_call(cx, init) {
|
} else if is_must_use_func_call(cx, init) {
|
||||||
span_lint_and_help(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
LET_UNDERSCORE_MUST_USE,
|
LET_UNDERSCORE_MUST_USE,
|
||||||
local.span,
|
local.span,
|
||||||
"non-binding `let` on a result of a `#[must_use]` function",
|
"non-binding `let` on a result of a `#[must_use]` function",
|
||||||
None,
|
|diag| {
|
||||||
"consider explicitly using function result",
|
diag.help("consider explicitly using function result");
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,19 +214,23 @@ fn check_local(&mut self, cx: &LateContext<'tcx>, local: &LetStmt<'tcx>) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
span_lint_and_help(
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
LET_UNDERSCORE_UNTYPED,
|
LET_UNDERSCORE_UNTYPED,
|
||||||
local.span,
|
local.span,
|
||||||
"non-binding `let` without a type annotation",
|
"non-binding `let` without a type annotation",
|
||||||
Some(Span::new(
|
|diag| {
|
||||||
|
diag.span_help(
|
||||||
|
Span::new(
|
||||||
local.pat.span.hi(),
|
local.pat.span.hi(),
|
||||||
local.pat.span.hi() + BytePos(1),
|
local.pat.span.hi() + BytePos(1),
|
||||||
local.pat.span.ctxt(),
|
local.pat.span.ctxt(),
|
||||||
local.pat.span.parent(),
|
local.pat.span.parent(),
|
||||||
)),
|
),
|
||||||
"consider adding a type annotation",
|
"consider adding a type annotation",
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_help;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use clippy_utils::ty::is_type_diagnostic_item;
|
use clippy_utils::ty::is_type_diagnostic_item;
|
||||||
use rustc_hir::{CaptureBy, Closure, Expr, ExprKind, PatKind};
|
use rustc_hir::{CaptureBy, Closure, Expr, ExprKind, PatKind};
|
||||||
use rustc_lint::LateContext;
|
use rustc_lint::LateContext;
|
||||||
@ -22,13 +22,17 @@ pub(super) fn check(cx: &LateContext<'_>, e: &Expr<'_>, arg: &Expr<'_>) {
|
|||||||
{
|
{
|
||||||
// span the area of the closure capture and warn that the
|
// span the area of the closure capture and warn that the
|
||||||
// original error will be thrown away
|
// original error will be thrown away
|
||||||
span_lint_and_help(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
MAP_ERR_IGNORE,
|
MAP_ERR_IGNORE,
|
||||||
fn_decl_span,
|
fn_decl_span,
|
||||||
"`map_err(|_|...` wildcard pattern discards the original error",
|
"`map_err(|_|...` wildcard pattern discards the original error",
|
||||||
None,
|
|diag| {
|
||||||
|
diag.help(
|
||||||
"consider storing the original error as a source in the new error, or silence this warning using an ignored identifier (`.map_err(|_foo| ...`)",
|
"consider storing the original error as a source in the new error, or silence this warning using an ignored identifier (`.map_err(|_foo| ...`)",
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_help;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use clippy_utils::is_in_test;
|
use clippy_utils::is_in_test;
|
||||||
use clippy_utils::macros::{find_assert_args, find_assert_eq_args, root_macro_call_first_node, PanicExpn};
|
use clippy_utils::macros::{find_assert_args, find_assert_eq_args, root_macro_call_first_node, PanicExpn};
|
||||||
use rustc_hir::Expr;
|
use rustc_hir::Expr;
|
||||||
@ -79,13 +79,15 @@ fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if let PanicExpn::Empty = panic_expn {
|
if let PanicExpn::Empty = panic_expn {
|
||||||
span_lint_and_help(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
MISSING_ASSERT_MESSAGE,
|
MISSING_ASSERT_MESSAGE,
|
||||||
macro_call.span,
|
macro_call.span,
|
||||||
"assert without any message",
|
"assert without any message",
|
||||||
None,
|
|diag| {
|
||||||
"consider describing why the failing assert is problematic",
|
diag.help("consider describing why the failing assert is problematic");
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_help;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use clippy_utils::is_lint_allowed;
|
use clippy_utils::is_lint_allowed;
|
||||||
use clippy_utils::macros::span_is_local;
|
use clippy_utils::macros::span_is_local;
|
||||||
use rustc_hir::def_id::DefIdMap;
|
use rustc_hir::def_id::DefIdMap;
|
||||||
@ -83,15 +83,15 @@ fn check_item(&mut self, cx: &LateContext<'tcx>, item: &'tcx Item<'tcx>) {
|
|||||||
cx.tcx.with_stable_hashing_context(|hcx| {
|
cx.tcx.with_stable_hashing_context(|hcx| {
|
||||||
for assoc in provided.values_sorted(&hcx, true) {
|
for assoc in provided.values_sorted(&hcx, true) {
|
||||||
let source_map = cx.tcx.sess.source_map();
|
let source_map = cx.tcx.sess.source_map();
|
||||||
let definition_span = source_map.guess_head_span(cx.tcx.def_span(assoc.def_id));
|
span_lint_and_then(
|
||||||
|
|
||||||
span_lint_and_help(
|
|
||||||
cx,
|
cx,
|
||||||
MISSING_TRAIT_METHODS,
|
MISSING_TRAIT_METHODS,
|
||||||
source_map.guess_head_span(item.span),
|
source_map.guess_head_span(item.span),
|
||||||
format!("missing trait method provided by default: `{}`", assoc.name),
|
format!("missing trait method provided by default: `{}`", assoc.name),
|
||||||
Some(definition_span),
|
|diag| {
|
||||||
"implement the method",
|
let definition_span = source_map.guess_head_span(cx.tcx.def_span(assoc.def_id));
|
||||||
|
diag.span_help(definition_span, "implement the method");
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use clippy_utils::diagnostics::{span_lint, span_lint_and_note};
|
use clippy_utils::diagnostics::{span_lint, span_lint_and_then};
|
||||||
use clippy_utils::{get_parent_expr, path_to_local, path_to_local_id};
|
use clippy_utils::{get_parent_expr, path_to_local, path_to_local_id};
|
||||||
use rustc_hir::intravisit::{walk_expr, Visitor};
|
use rustc_hir::intravisit::{walk_expr, Visitor};
|
||||||
use rustc_hir::{BinOpKind, Block, Expr, ExprKind, HirId, LetStmt, Node, Stmt, StmtKind};
|
use rustc_hir::{BinOpKind, Block, Expr, ExprKind, HirId, LetStmt, Node, Stmt, StmtKind};
|
||||||
@ -324,14 +324,18 @@ fn visit_expr(&mut self, expr: &'tcx Expr<'_>) {
|
|||||||
if path_to_local_id(expr, self.var) {
|
if path_to_local_id(expr, self.var) {
|
||||||
// Check that this is a read, not a write.
|
// Check that this is a read, not a write.
|
||||||
if !is_in_assignment_position(self.cx, expr) {
|
if !is_in_assignment_position(self.cx, expr) {
|
||||||
span_lint_and_note(
|
span_lint_and_then(
|
||||||
self.cx,
|
self.cx,
|
||||||
MIXED_READ_WRITE_IN_EXPRESSION,
|
MIXED_READ_WRITE_IN_EXPRESSION,
|
||||||
expr.span,
|
expr.span,
|
||||||
format!("unsequenced read of `{}`", self.cx.tcx.hir().name(self.var)),
|
format!("unsequenced read of `{}`", self.cx.tcx.hir().name(self.var)),
|
||||||
Some(self.write_expr.span),
|
|diag| {
|
||||||
|
diag.span_note(
|
||||||
|
self.write_expr.span,
|
||||||
"whether read occurs before this write depends on evaluation order",
|
"whether read occurs before this write depends on evaluation order",
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
match expr.kind {
|
match expr.kind {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_help;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use rustc_ast::ast;
|
use rustc_ast::ast;
|
||||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
use rustc_data_structures::fx::{FxHashMap, FxHashSet};
|
||||||
use rustc_lint::{EarlyContext, EarlyLintPass, Level, LintContext};
|
use rustc_lint::{EarlyContext, EarlyLintPass, Level, LintContext};
|
||||||
@ -121,17 +121,18 @@ fn check_crate(&mut self, cx: &EarlyContext<'_>, _: &ast::Crate) {
|
|||||||
for folder in &folder_segments {
|
for folder in &folder_segments {
|
||||||
if !mod_folders.contains(folder) {
|
if !mod_folders.contains(folder) {
|
||||||
if let Some((file, path)) = file_map.get(folder) {
|
if let Some((file, path)) = file_map.get(folder) {
|
||||||
let mut correct = path.to_path_buf();
|
span_lint_and_then(
|
||||||
correct.pop();
|
|
||||||
correct.push(folder);
|
|
||||||
correct.push("mod.rs");
|
|
||||||
span_lint_and_help(
|
|
||||||
cx,
|
cx,
|
||||||
SELF_NAMED_MODULE_FILES,
|
SELF_NAMED_MODULE_FILES,
|
||||||
Span::new(file.start_pos, file.start_pos, SyntaxContext::root(), None),
|
Span::new(file.start_pos, file.start_pos, SyntaxContext::root(), None),
|
||||||
format!("`mod.rs` files are required, found `{}`", path.display()),
|
format!("`mod.rs` files are required, found `{}`", path.display()),
|
||||||
None,
|
|diag| {
|
||||||
format!("move `{}` to `{}`", path.display(), correct.display(),),
|
let mut correct = path.to_path_buf();
|
||||||
|
correct.pop();
|
||||||
|
correct.push(folder);
|
||||||
|
correct.push("mod.rs");
|
||||||
|
diag.help(format!("move `{}` to `{}`", path.display(), correct.display(),));
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -161,17 +162,18 @@ fn process_paths_for_mod_files<'a>(
|
|||||||
/// for code-sharing between tests.
|
/// for code-sharing between tests.
|
||||||
fn check_self_named_mod_exists(cx: &EarlyContext<'_>, path: &Path, file: &SourceFile) {
|
fn check_self_named_mod_exists(cx: &EarlyContext<'_>, path: &Path, file: &SourceFile) {
|
||||||
if path.ends_with("mod.rs") && !path.starts_with("tests") {
|
if path.ends_with("mod.rs") && !path.starts_with("tests") {
|
||||||
let mut mod_file = path.to_path_buf();
|
span_lint_and_then(
|
||||||
mod_file.pop();
|
|
||||||
mod_file.set_extension("rs");
|
|
||||||
|
|
||||||
span_lint_and_help(
|
|
||||||
cx,
|
cx,
|
||||||
MOD_MODULE_FILES,
|
MOD_MODULE_FILES,
|
||||||
Span::new(file.start_pos, file.start_pos, SyntaxContext::root(), None),
|
Span::new(file.start_pos, file.start_pos, SyntaxContext::root(), None),
|
||||||
format!("`mod.rs` files are not allowed, found `{}`", path.display()),
|
format!("`mod.rs` files are not allowed, found `{}`", path.display()),
|
||||||
None,
|
|diag| {
|
||||||
format!("move `{}` to `{}`", path.display(), mod_file.display()),
|
let mut mod_file = path.to_path_buf();
|
||||||
|
mod_file.pop();
|
||||||
|
mod_file.set_extension("rs");
|
||||||
|
|
||||||
|
diag.help(format!("move `{}` to `{}`", path.display(), mod_file.display()));
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_help;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
use rustc_lint::LateContext;
|
use rustc_lint::LateContext;
|
||||||
|
|
||||||
@ -15,13 +15,9 @@ pub(crate) fn check<'tcx>(
|
|||||||
&& cx.typeck_results().expr_ty(left).is_integral()
|
&& cx.typeck_results().expr_ty(left).is_integral()
|
||||||
&& cx.typeck_results().expr_ty(right).is_integral()
|
&& cx.typeck_results().expr_ty(right).is_integral()
|
||||||
{
|
{
|
||||||
span_lint_and_help(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
cx,
|
span_lint_and_then(cx, INTEGER_DIVISION, expr.span, "integer division", |diag| {
|
||||||
INTEGER_DIVISION,
|
diag.help("division of integers may cause loss of precision. consider using floats");
|
||||||
expr.span,
|
});
|
||||||
"integer division",
|
|
||||||
None,
|
|
||||||
"division of integers may cause loss of precision. consider using floats",
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_help;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use rustc_ast::ast::{Item, ItemKind};
|
use rustc_ast::ast::{Item, ItemKind};
|
||||||
use rustc_lint::{EarlyContext, EarlyLintPass};
|
use rustc_lint::{EarlyContext, EarlyLintPass};
|
||||||
use rustc_session::declare_lint_pass;
|
use rustc_session::declare_lint_pass;
|
||||||
@ -57,24 +57,16 @@ fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) {
|
|||||||
|
|
||||||
for field in fields {
|
for field in fields {
|
||||||
if all_priv && field.vis.kind.is_pub() {
|
if all_priv && field.vis.kind.is_pub() {
|
||||||
span_lint_and_help(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
cx,
|
span_lint_and_then(cx, PARTIAL_PUB_FIELDS, field.vis.span, msg, |diag| {
|
||||||
PARTIAL_PUB_FIELDS,
|
diag.help("consider using private field here");
|
||||||
field.vis.span,
|
});
|
||||||
msg,
|
|
||||||
None,
|
|
||||||
"consider using private field here",
|
|
||||||
);
|
|
||||||
return;
|
return;
|
||||||
} else if all_pub && !field.vis.kind.is_pub() {
|
} else if all_pub && !field.vis.kind.is_pub() {
|
||||||
span_lint_and_help(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
cx,
|
span_lint_and_then(cx, PARTIAL_PUB_FIELDS, field.vis.span, msg, |diag| {
|
||||||
PARTIAL_PUB_FIELDS,
|
diag.help("consider using public field here");
|
||||||
field.vis.span,
|
});
|
||||||
msg,
|
|
||||||
None,
|
|
||||||
"consider using public field here",
|
|
||||||
);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_help;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use rustc_hir::{
|
use rustc_hir::{
|
||||||
intravisit, Body, Expr, ExprKind, FnDecl, LetExpr, LocalSource, Mutability, Pat, PatKind, Stmt, StmtKind,
|
intravisit, Body, Expr, ExprKind, FnDecl, LetExpr, LocalSource, Mutability, Pat, PatKind, Stmt, StmtKind,
|
||||||
};
|
};
|
||||||
@ -133,13 +133,14 @@ enum DerefPossible {
|
|||||||
fn apply_lint(cx: &LateContext<'_>, pat: &Pat<'_>, deref_possible: DerefPossible) -> bool {
|
fn apply_lint(cx: &LateContext<'_>, pat: &Pat<'_>, deref_possible: DerefPossible) -> bool {
|
||||||
let maybe_mismatch = find_first_mismatch(cx, pat);
|
let maybe_mismatch = find_first_mismatch(cx, pat);
|
||||||
if let Some((span, mutability, level)) = maybe_mismatch {
|
if let Some((span, mutability, level)) = maybe_mismatch {
|
||||||
span_lint_and_help(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
PATTERN_TYPE_MISMATCH,
|
PATTERN_TYPE_MISMATCH,
|
||||||
span,
|
span,
|
||||||
"type of pattern does not match the expression type",
|
"type of pattern does not match the expression type",
|
||||||
None,
|
|diag| {
|
||||||
format!(
|
diag.help(format!(
|
||||||
"{}explicitly match against a `{}` pattern and adjust the enclosed variable bindings",
|
"{}explicitly match against a `{}` pattern and adjust the enclosed variable bindings",
|
||||||
match (deref_possible, level) {
|
match (deref_possible, level) {
|
||||||
(DerefPossible::Possible, Level::Top) => "use `*` to dereference the match expression or ",
|
(DerefPossible::Possible, Level::Top) => "use `*` to dereference the match expression or ",
|
||||||
@ -149,7 +150,8 @@ fn apply_lint(cx: &LateContext<'_>, pat: &Pat<'_>, deref_possible: DerefPossible
|
|||||||
Mutability::Mut => "&mut _",
|
Mutability::Mut => "&mut _",
|
||||||
Mutability::Not => "&_",
|
Mutability::Not => "&_",
|
||||||
},
|
},
|
||||||
),
|
));
|
||||||
|
},
|
||||||
);
|
);
|
||||||
true
|
true
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_help;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use rustc_ast::ast::{Item, ItemKind, VisibilityKind};
|
use rustc_ast::ast::{Item, ItemKind, VisibilityKind};
|
||||||
use rustc_lint::{EarlyContext, EarlyLintPass};
|
use rustc_lint::{EarlyContext, EarlyLintPass};
|
||||||
use rustc_session::declare_lint_pass;
|
use rustc_session::declare_lint_pass;
|
||||||
@ -42,14 +42,10 @@ fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) {
|
|||||||
if let ItemKind::Use(_) = item.kind
|
if let ItemKind::Use(_) = item.kind
|
||||||
&& let VisibilityKind::Public = item.vis.kind
|
&& let VisibilityKind::Public = item.vis.kind
|
||||||
{
|
{
|
||||||
span_lint_and_help(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
cx,
|
span_lint_and_then(cx, PUB_USE, item.span, "using `pub use`", |diag| {
|
||||||
PUB_USE,
|
diag.help("move the exported item to a public module instead");
|
||||||
item.span,
|
});
|
||||||
"using `pub use`",
|
|
||||||
None,
|
|
||||||
"move the exported item to a public module instead",
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_sugg;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use clippy_utils::is_lint_allowed;
|
use clippy_utils::is_lint_allowed;
|
||||||
use clippy_utils::macros::span_is_local;
|
use clippy_utils::macros::span_is_local;
|
||||||
use clippy_utils::source::snippet;
|
use clippy_utils::source::snippet;
|
||||||
@ -105,11 +105,10 @@ fn check_str(cx: &LateContext<'_>, span: Span, id: HirId) {
|
|||||||
|
|
||||||
let string = snippet(cx, span, "");
|
let string = snippet(cx, span, "");
|
||||||
if string.chars().any(|c| ['\u{200B}', '\u{ad}', '\u{2060}'].contains(&c)) {
|
if string.chars().any(|c| ['\u{200B}', '\u{ad}', '\u{2060}'].contains(&c)) {
|
||||||
span_lint_and_sugg(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
cx,
|
span_lint_and_then(cx, INVISIBLE_CHARACTERS, span, "invisible character detected", |diag| {
|
||||||
INVISIBLE_CHARACTERS,
|
diag.span_suggestion(
|
||||||
span,
|
span,
|
||||||
"invisible character detected",
|
|
||||||
"consider replacing the string with",
|
"consider replacing the string with",
|
||||||
string
|
string
|
||||||
.replace('\u{200B}', "\\u{200B}")
|
.replace('\u{200B}', "\\u{200B}")
|
||||||
@ -117,14 +116,19 @@ fn check_str(cx: &LateContext<'_>, span: Span, id: HirId) {
|
|||||||
.replace('\u{2060}', "\\u{2060}"),
|
.replace('\u{2060}', "\\u{2060}"),
|
||||||
Applicability::MachineApplicable,
|
Applicability::MachineApplicable,
|
||||||
);
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if string.chars().any(|c| c as u32 > 0x7F) {
|
if string.chars().any(|c| c as u32 > 0x7F) {
|
||||||
span_lint_and_sugg(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
NON_ASCII_LITERAL,
|
NON_ASCII_LITERAL,
|
||||||
span,
|
span,
|
||||||
"literal non-ASCII character detected",
|
"literal non-ASCII character detected",
|
||||||
|
|diag| {
|
||||||
|
diag.span_suggestion(
|
||||||
|
span,
|
||||||
"consider replacing the string with",
|
"consider replacing the string with",
|
||||||
if is_lint_allowed(cx, UNICODE_NOT_NFC, id) {
|
if is_lint_allowed(cx, UNICODE_NOT_NFC, id) {
|
||||||
escape(string.chars())
|
escape(string.chars())
|
||||||
@ -133,17 +137,19 @@ fn check_str(cx: &LateContext<'_>, span: Span, id: HirId) {
|
|||||||
},
|
},
|
||||||
Applicability::MachineApplicable,
|
Applicability::MachineApplicable,
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if is_lint_allowed(cx, NON_ASCII_LITERAL, id) && string.chars().zip(string.nfc()).any(|(a, b)| a != b) {
|
if is_lint_allowed(cx, NON_ASCII_LITERAL, id) && string.chars().zip(string.nfc()).any(|(a, b)| a != b) {
|
||||||
span_lint_and_sugg(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
cx,
|
span_lint_and_then(cx, UNICODE_NOT_NFC, span, "non-NFC Unicode sequence detected", |diag| {
|
||||||
UNICODE_NOT_NFC,
|
diag.span_suggestion(
|
||||||
span,
|
span,
|
||||||
"non-NFC Unicode sequence detected",
|
|
||||||
"consider replacing the string with",
|
"consider replacing the string with",
|
||||||
string.nfc().collect::<String>(),
|
string.nfc().collect::<String>(),
|
||||||
Applicability::MachineApplicable,
|
Applicability::MachineApplicable,
|
||||||
);
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use clippy_utils::diagnostics::span_lint_and_sugg;
|
use clippy_utils::diagnostics::span_lint_and_then;
|
||||||
use clippy_utils::source::snippet_opt;
|
use clippy_utils::source::snippet_opt;
|
||||||
use rustc_ast::ast::{Item, VisibilityKind};
|
use rustc_ast::ast::{Item, VisibilityKind};
|
||||||
use rustc_errors::Applicability;
|
use rustc_errors::Applicability;
|
||||||
@ -85,15 +85,20 @@ fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) {
|
|||||||
if **path == kw::SelfLower
|
if **path == kw::SelfLower
|
||||||
&& let Some(false) = is_from_proc_macro(cx, item.vis.span)
|
&& let Some(false) = is_from_proc_macro(cx, item.vis.span)
|
||||||
{
|
{
|
||||||
span_lint_and_sugg(
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
NEEDLESS_PUB_SELF,
|
NEEDLESS_PUB_SELF,
|
||||||
item.vis.span,
|
item.vis.span,
|
||||||
format!("unnecessary `pub({}self)`", if *shorthand { "" } else { "in " }),
|
format!("unnecessary `pub({}self)`", if *shorthand { "" } else { "in " }),
|
||||||
|
|diag| {
|
||||||
|
diag.span_suggestion_hidden(
|
||||||
|
item.vis.span,
|
||||||
"remove it",
|
"remove it",
|
||||||
String::new(),
|
String::new(),
|
||||||
Applicability::MachineApplicable,
|
Applicability::MachineApplicable,
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (**path == kw::Super || **path == kw::SelfLower || **path == kw::Crate)
|
if (**path == kw::Super || **path == kw::SelfLower || **path == kw::Crate)
|
||||||
@ -101,30 +106,42 @@ fn check_item(&mut self, cx: &EarlyContext<'_>, item: &Item) {
|
|||||||
&& let [.., last] = &*path.segments
|
&& let [.., last] = &*path.segments
|
||||||
&& let Some(false) = is_from_proc_macro(cx, item.vis.span)
|
&& let Some(false) = is_from_proc_macro(cx, item.vis.span)
|
||||||
{
|
{
|
||||||
span_lint_and_sugg(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
PUB_WITHOUT_SHORTHAND,
|
PUB_WITHOUT_SHORTHAND,
|
||||||
item.vis.span,
|
item.vis.span,
|
||||||
"usage of `pub` with `in`",
|
"usage of `pub` with `in`",
|
||||||
|
|diag| {
|
||||||
|
diag.span_suggestion(
|
||||||
|
item.vis.span,
|
||||||
"remove it",
|
"remove it",
|
||||||
format!("pub({})", last.ident),
|
format!("pub({})", last.ident),
|
||||||
Applicability::MachineApplicable,
|
Applicability::MachineApplicable,
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if *shorthand
|
if *shorthand
|
||||||
&& let [.., last] = &*path.segments
|
&& let [.., last] = &*path.segments
|
||||||
&& let Some(false) = is_from_proc_macro(cx, item.vis.span)
|
&& let Some(false) = is_from_proc_macro(cx, item.vis.span)
|
||||||
{
|
{
|
||||||
span_lint_and_sugg(
|
#[expect(clippy::collapsible_span_lint_calls, reason = "rust-clippy#7797")]
|
||||||
|
span_lint_and_then(
|
||||||
cx,
|
cx,
|
||||||
PUB_WITH_SHORTHAND,
|
PUB_WITH_SHORTHAND,
|
||||||
item.vis.span,
|
item.vis.span,
|
||||||
"usage of `pub` without `in`",
|
"usage of `pub` without `in`",
|
||||||
|
|diag| {
|
||||||
|
diag.span_suggestion(
|
||||||
|
item.vis.span,
|
||||||
"add it",
|
"add it",
|
||||||
format!("pub(in {})", last.ident),
|
format!("pub(in {})", last.ident),
|
||||||
Applicability::MachineApplicable,
|
Applicability::MachineApplicable,
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,100 +2,179 @@ error: float has excessive precision
|
|||||||
--> tests/ui/excessive_precision.rs:20:26
|
--> tests/ui/excessive_precision.rs:20:26
|
||||||
|
|
|
|
||||||
LL | const BAD32_1: f32 = 0.123_456_789_f32;
|
LL | const BAD32_1: f32 = 0.123_456_789_f32;
|
||||||
| ^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0.123_456_79_f32`
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: `-D clippy::excessive-precision` implied by `-D warnings`
|
= note: `-D clippy::excessive-precision` implied by `-D warnings`
|
||||||
= help: to override `-D warnings` add `#[allow(clippy::excessive_precision)]`
|
= help: to override `-D warnings` add `#[allow(clippy::excessive_precision)]`
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | const BAD32_1: f32 = 0.123_456_79_f32;
|
||||||
|
| ~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:21:26
|
--> tests/ui/excessive_precision.rs:21:26
|
||||||
|
|
|
|
||||||
LL | const BAD32_2: f32 = 0.123_456_789;
|
LL | const BAD32_2: f32 = 0.123_456_789;
|
||||||
| ^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0.123_456_79`
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | const BAD32_2: f32 = 0.123_456_79;
|
||||||
|
| ~~~~~~~~~~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:22:26
|
--> tests/ui/excessive_precision.rs:22:26
|
||||||
|
|
|
|
||||||
LL | const BAD32_3: f32 = 0.100_000_000_000_1;
|
LL | const BAD32_3: f32 = 0.100_000_000_000_1;
|
||||||
| ^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0.1`
|
| ^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | const BAD32_3: f32 = 0.1;
|
||||||
|
| ~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:23:29
|
--> tests/ui/excessive_precision.rs:23:29
|
||||||
|
|
|
|
||||||
LL | const BAD32_EDGE: f32 = 1.000_000_9;
|
LL | const BAD32_EDGE: f32 = 1.000_000_9;
|
||||||
| ^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.000_001`
|
| ^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | const BAD32_EDGE: f32 = 1.000_001;
|
||||||
|
| ~~~~~~~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:27:26
|
--> tests/ui/excessive_precision.rs:27:26
|
||||||
|
|
|
|
||||||
LL | const BAD64_3: f64 = 0.100_000_000_000_000_000_1;
|
LL | const BAD64_3: f64 = 0.100_000_000_000_000_000_1;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0.1`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | const BAD64_3: f64 = 0.1;
|
||||||
|
| ~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:30:22
|
--> tests/ui/excessive_precision.rs:30:22
|
||||||
|
|
|
|
||||||
LL | println!("{:?}", 8.888_888_888_888_888_888_888);
|
LL | println!("{:?}", 8.888_888_888_888_888_888_888);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `8.888_888_888_888_89`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | println!("{:?}", 8.888_888_888_888_89);
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:41:22
|
--> tests/ui/excessive_precision.rs:41:22
|
||||||
|
|
|
|
||||||
LL | let bad32: f32 = 1.123_456_789;
|
LL | let bad32: f32 = 1.123_456_789;
|
||||||
| ^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.123_456_8`
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | let bad32: f32 = 1.123_456_8;
|
||||||
|
| ~~~~~~~~~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:42:26
|
--> tests/ui/excessive_precision.rs:42:26
|
||||||
|
|
|
|
||||||
LL | let bad32_suf: f32 = 1.123_456_789_f32;
|
LL | let bad32_suf: f32 = 1.123_456_789_f32;
|
||||||
| ^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.123_456_8_f32`
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | let bad32_suf: f32 = 1.123_456_8_f32;
|
||||||
|
| ~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:43:21
|
--> tests/ui/excessive_precision.rs:43:21
|
||||||
|
|
|
|
||||||
LL | let bad32_inf = 1.123_456_789_f32;
|
LL | let bad32_inf = 1.123_456_789_f32;
|
||||||
| ^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.123_456_8_f32`
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | let bad32_inf = 1.123_456_8_f32;
|
||||||
|
| ~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:53:36
|
--> tests/ui/excessive_precision.rs:53:36
|
||||||
|
|
|
|
||||||
LL | let bad_vec32: Vec<f32> = vec![0.123_456_789];
|
LL | let bad_vec32: Vec<f32> = vec![0.123_456_789];
|
||||||
| ^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0.123_456_79`
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | let bad_vec32: Vec<f32> = vec![0.123_456_79];
|
||||||
|
| ~~~~~~~~~~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:54:36
|
--> tests/ui/excessive_precision.rs:54:36
|
||||||
|
|
|
|
||||||
LL | let bad_vec64: Vec<f64> = vec![0.123_456_789_123_456_789];
|
LL | let bad_vec64: Vec<f64> = vec![0.123_456_789_123_456_789];
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0.123_456_789_123_456_78`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | let bad_vec64: Vec<f64> = vec![0.123_456_789_123_456_78];
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:58:24
|
--> tests/ui/excessive_precision.rs:58:24
|
||||||
|
|
|
|
||||||
LL | let bad_e32: f32 = 1.123_456_788_888e-10;
|
LL | let bad_e32: f32 = 1.123_456_788_888e-10;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.123_456_8e-10`
|
| ^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | let bad_e32: f32 = 1.123_456_8e-10;
|
||||||
|
| ~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:61:27
|
--> tests/ui/excessive_precision.rs:61:27
|
||||||
|
|
|
|
||||||
LL | let bad_bige32: f32 = 1.123_456_788_888E-10;
|
LL | let bad_bige32: f32 = 1.123_456_788_888E-10;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `1.123_456_8E-10`
|
| ^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | let bad_bige32: f32 = 1.123_456_8E-10;
|
||||||
|
| ~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:70:13
|
--> tests/ui/excessive_precision.rs:70:13
|
||||||
|
|
|
|
||||||
LL | let _ = 2.225_073_858_507_201_1e-308_f64;
|
LL | let _ = 2.225_073_858_507_201_1e-308_f64;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `2.225_073_858_507_201e-308_f64`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | let _ = 2.225_073_858_507_201e-308_f64;
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:73:13
|
--> tests/ui/excessive_precision.rs:73:13
|
||||||
|
|
|
|
||||||
LL | let _ = 1.000_000_000_000_001e-324_f64;
|
LL | let _ = 1.000_000_000_000_001e-324_f64;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `0_f64`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | let _ = 0_f64;
|
||||||
|
| ~~~~~
|
||||||
|
|
||||||
error: float has excessive precision
|
error: float has excessive precision
|
||||||
--> tests/ui/excessive_precision.rs:83:20
|
--> tests/ui/excessive_precision.rs:83:20
|
||||||
|
|
|
|
||||||
LL | const _: f64 = 3.0000000000000000e+00;
|
LL | const _: f64 = 3.0000000000000000e+00;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or truncating it to: `3.0`
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or truncating it to
|
||||||
|
|
|
||||||
|
LL | const _: f64 = 3.0;
|
||||||
|
| ~~~
|
||||||
|
|
||||||
error: aborting due to 16 previous errors
|
error: aborting due to 16 previous errors
|
||||||
|
|
||||||
|
@ -2,70 +2,124 @@ error: literal cannot be represented as the underlying type without loss of prec
|
|||||||
--> tests/ui/lossy_float_literal.rs:14:18
|
--> tests/ui/lossy_float_literal.rs:14:18
|
||||||
|
|
|
|
||||||
LL | let _: f32 = 16_777_217.0;
|
LL | let _: f32 = 16_777_217.0;
|
||||||
| ^^^^^^^^^^^^ help: consider changing the type or replacing it with: `16_777_216.0`
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: `-D clippy::lossy-float-literal` implied by `-D warnings`
|
= note: `-D clippy::lossy-float-literal` implied by `-D warnings`
|
||||||
= help: to override `-D warnings` add `#[allow(clippy::lossy_float_literal)]`
|
= help: to override `-D warnings` add `#[allow(clippy::lossy_float_literal)]`
|
||||||
|
help: consider changing the type or replacing it with
|
||||||
|
|
|
||||||
|
LL | let _: f32 = 16_777_216.0;
|
||||||
|
| ~~~~~~~~~~~~
|
||||||
|
|
||||||
error: literal cannot be represented as the underlying type without loss of precision
|
error: literal cannot be represented as the underlying type without loss of precision
|
||||||
--> tests/ui/lossy_float_literal.rs:15:18
|
--> tests/ui/lossy_float_literal.rs:15:18
|
||||||
|
|
|
|
||||||
LL | let _: f32 = 16_777_219.0;
|
LL | let _: f32 = 16_777_219.0;
|
||||||
| ^^^^^^^^^^^^ help: consider changing the type or replacing it with: `16_777_220.0`
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or replacing it with
|
||||||
|
|
|
||||||
|
LL | let _: f32 = 16_777_220.0;
|
||||||
|
| ~~~~~~~~~~~~
|
||||||
|
|
||||||
error: literal cannot be represented as the underlying type without loss of precision
|
error: literal cannot be represented as the underlying type without loss of precision
|
||||||
--> tests/ui/lossy_float_literal.rs:16:18
|
--> tests/ui/lossy_float_literal.rs:16:18
|
||||||
|
|
|
|
||||||
LL | let _: f32 = 16_777_219.;
|
LL | let _: f32 = 16_777_219.;
|
||||||
| ^^^^^^^^^^^ help: consider changing the type or replacing it with: `16_777_220.0`
|
| ^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or replacing it with
|
||||||
|
|
|
||||||
|
LL | let _: f32 = 16_777_220.0;
|
||||||
|
| ~~~~~~~~~~~~
|
||||||
|
|
||||||
error: literal cannot be represented as the underlying type without loss of precision
|
error: literal cannot be represented as the underlying type without loss of precision
|
||||||
--> tests/ui/lossy_float_literal.rs:17:18
|
--> tests/ui/lossy_float_literal.rs:17:18
|
||||||
|
|
|
|
||||||
LL | let _: f32 = 16_777_219.000;
|
LL | let _: f32 = 16_777_219.000;
|
||||||
| ^^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `16_777_220.0`
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or replacing it with
|
||||||
|
|
|
||||||
|
LL | let _: f32 = 16_777_220.0;
|
||||||
|
| ~~~~~~~~~~~~
|
||||||
|
|
||||||
error: literal cannot be represented as the underlying type without loss of precision
|
error: literal cannot be represented as the underlying type without loss of precision
|
||||||
--> tests/ui/lossy_float_literal.rs:18:13
|
--> tests/ui/lossy_float_literal.rs:18:13
|
||||||
|
|
|
|
||||||
LL | let _ = 16_777_219f32;
|
LL | let _ = 16_777_219f32;
|
||||||
| ^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `16_777_220_f32`
|
| ^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or replacing it with
|
||||||
|
|
|
||||||
|
LL | let _ = 16_777_220_f32;
|
||||||
|
| ~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: literal cannot be represented as the underlying type without loss of precision
|
error: literal cannot be represented as the underlying type without loss of precision
|
||||||
--> tests/ui/lossy_float_literal.rs:19:19
|
--> tests/ui/lossy_float_literal.rs:19:19
|
||||||
|
|
|
|
||||||
LL | let _: f32 = -16_777_219.0;
|
LL | let _: f32 = -16_777_219.0;
|
||||||
| ^^^^^^^^^^^^ help: consider changing the type or replacing it with: `16_777_220.0`
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or replacing it with
|
||||||
|
|
|
||||||
|
LL | let _: f32 = -16_777_220.0;
|
||||||
|
| ~~~~~~~~~~~~
|
||||||
|
|
||||||
error: literal cannot be represented as the underlying type without loss of precision
|
error: literal cannot be represented as the underlying type without loss of precision
|
||||||
--> tests/ui/lossy_float_literal.rs:21:18
|
--> tests/ui/lossy_float_literal.rs:21:18
|
||||||
|
|
|
|
||||||
LL | let _: f64 = 9_007_199_254_740_993.0;
|
LL | let _: f64 = 9_007_199_254_740_993.0;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `9_007_199_254_740_992.0`
|
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or replacing it with
|
||||||
|
|
|
||||||
|
LL | let _: f64 = 9_007_199_254_740_992.0;
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: literal cannot be represented as the underlying type without loss of precision
|
error: literal cannot be represented as the underlying type without loss of precision
|
||||||
--> tests/ui/lossy_float_literal.rs:22:18
|
--> tests/ui/lossy_float_literal.rs:22:18
|
||||||
|
|
|
|
||||||
LL | let _: f64 = 9_007_199_254_740_993.;
|
LL | let _: f64 = 9_007_199_254_740_993.;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `9_007_199_254_740_992.0`
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or replacing it with
|
||||||
|
|
|
||||||
|
LL | let _: f64 = 9_007_199_254_740_992.0;
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: literal cannot be represented as the underlying type without loss of precision
|
error: literal cannot be represented as the underlying type without loss of precision
|
||||||
--> tests/ui/lossy_float_literal.rs:23:18
|
--> tests/ui/lossy_float_literal.rs:23:18
|
||||||
|
|
|
|
||||||
LL | let _: f64 = 9_007_199_254_740_993.00;
|
LL | let _: f64 = 9_007_199_254_740_993.00;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `9_007_199_254_740_992.0`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or replacing it with
|
||||||
|
|
|
||||||
|
LL | let _: f64 = 9_007_199_254_740_992.0;
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: literal cannot be represented as the underlying type without loss of precision
|
error: literal cannot be represented as the underlying type without loss of precision
|
||||||
--> tests/ui/lossy_float_literal.rs:24:13
|
--> tests/ui/lossy_float_literal.rs:24:13
|
||||||
|
|
|
|
||||||
LL | let _ = 9_007_199_254_740_993f64;
|
LL | let _ = 9_007_199_254_740_993f64;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `9_007_199_254_740_992_f64`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or replacing it with
|
||||||
|
|
|
||||||
|
LL | let _ = 9_007_199_254_740_992_f64;
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: literal cannot be represented as the underlying type without loss of precision
|
error: literal cannot be represented as the underlying type without loss of precision
|
||||||
--> tests/ui/lossy_float_literal.rs:25:19
|
--> tests/ui/lossy_float_literal.rs:25:19
|
||||||
|
|
|
|
||||||
LL | let _: f64 = -9_007_199_254_740_993.0;
|
LL | let _: f64 = -9_007_199_254_740_993.0;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^ help: consider changing the type or replacing it with: `9_007_199_254_740_992.0`
|
| ^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
help: consider changing the type or replacing it with
|
||||||
|
|
|
||||||
|
LL | let _: f64 = -9_007_199_254_740_992.0;
|
||||||
|
| ~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
error: aborting due to 11 previous errors
|
error: aborting due to 11 previous errors
|
||||||
|
|
||||||
|
@ -2,22 +2,27 @@ error: unnecessary `pub(self)`
|
|||||||
--> tests/ui/needless_pub_self.rs:13:1
|
--> tests/ui/needless_pub_self.rs:13:1
|
||||||
|
|
|
|
||||||
LL | pub(self) fn a() {}
|
LL | pub(self) fn a() {}
|
||||||
| ^^^^^^^^^ help: remove it
|
| ^^^^^^^^^
|
||||||
|
|
|
|
||||||
= note: `-D clippy::needless-pub-self` implied by `-D warnings`
|
= note: `-D clippy::needless-pub-self` implied by `-D warnings`
|
||||||
= help: to override `-D warnings` add `#[allow(clippy::needless_pub_self)]`
|
= help: to override `-D warnings` add `#[allow(clippy::needless_pub_self)]`
|
||||||
|
= help: remove it
|
||||||
|
|
||||||
error: unnecessary `pub(in self)`
|
error: unnecessary `pub(in self)`
|
||||||
--> tests/ui/needless_pub_self.rs:14:1
|
--> tests/ui/needless_pub_self.rs:14:1
|
||||||
|
|
|
|
||||||
LL | pub(in self) fn b() {}
|
LL | pub(in self) fn b() {}
|
||||||
| ^^^^^^^^^^^^ help: remove it
|
| ^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= help: remove it
|
||||||
|
|
||||||
error: unnecessary `pub(self)`
|
error: unnecessary `pub(self)`
|
||||||
--> tests/ui/needless_pub_self.rs:20:5
|
--> tests/ui/needless_pub_self.rs:20:5
|
||||||
|
|
|
|
||||||
LL | pub(self) fn f() {}
|
LL | pub(self) fn f() {}
|
||||||
| ^^^^^^^^^ help: remove it
|
| ^^^^^^^^^
|
||||||
|
|
|
||||||
|
= help: remove it
|
||||||
|
|
||||||
error: aborting due to 3 previous errors
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user