summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_lint/src/let_underscore.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_lint/src/let_underscore.rs')
-rw-r--r--compiler/rustc_lint/src/let_underscore.rs47
1 files changed, 14 insertions, 33 deletions
diff --git a/compiler/rustc_lint/src/let_underscore.rs b/compiler/rustc_lint/src/let_underscore.rs
index 04d844d21..b83a9665f 100644
--- a/compiler/rustc_lint/src/let_underscore.rs
+++ b/compiler/rustc_lint/src/let_underscore.rs
@@ -1,5 +1,8 @@
-use crate::{LateContext, LateLintPass, LintContext};
-use rustc_errors::{Applicability, DiagnosticBuilder, MultiSpan};
+use crate::{
+ lints::{NonBindingLet, NonBindingLetSub},
+ LateContext, LateLintPass, LintContext,
+};
+use rustc_errors::MultiSpan;
use rustc_hir as hir;
use rustc_middle::ty;
use rustc_span::Symbol;
@@ -119,6 +122,11 @@ impl<'tcx> LateLintPass<'tcx> for LetUnderscore {
_ => false,
};
+ let sub = NonBindingLetSub {
+ suggestion: local.pat.span,
+ multi_suggestion_start: local.span.until(init.span),
+ multi_suggestion_end: init.span.shrink_to_hi(),
+ };
if is_sync_lock {
let mut span = MultiSpan::from_spans(vec![local.pat.span, init.span]);
span.push_span_label(
@@ -129,41 +137,14 @@ impl<'tcx> LateLintPass<'tcx> for LetUnderscore {
init.span,
"this binding will immediately drop the value assigned to it".to_string(),
);
- cx.struct_span_lint(
- LET_UNDERSCORE_LOCK,
- span,
- "non-binding let on a synchronization lock",
- |lint| build_lint(lint, local, init.span),
- )
+ cx.emit_spanned_lint(LET_UNDERSCORE_LOCK, span, NonBindingLet::SyncLock { sub });
} else {
- cx.struct_span_lint(
+ cx.emit_spanned_lint(
LET_UNDERSCORE_DROP,
local.span,
- "non-binding let on a type that implements `Drop`",
- |lint| build_lint(lint, local, init.span),
- )
+ NonBindingLet::DropType { sub },
+ );
}
}
}
}
-
-fn build_lint<'a, 'b>(
- lint: &'a mut DiagnosticBuilder<'b, ()>,
- local: &hir::Local<'_>,
- init_span: rustc_span::Span,
-) -> &'a mut DiagnosticBuilder<'b, ()> {
- lint.span_suggestion_verbose(
- local.pat.span,
- "consider binding to an unused variable to avoid immediately dropping the value",
- "_unused",
- Applicability::MachineApplicable,
- )
- .multipart_suggestion(
- "consider immediately dropping the value",
- vec![
- (local.span.until(init_span), "drop(".to_string()),
- (init_span.shrink_to_hi(), ")".to_string()),
- ],
- Applicability::MachineApplicable,
- )
-}