Migrate 'trivial cast' lint
This commit is contained in:
parent
82471e9f6c
commit
80a9699117
@ -145,6 +145,12 @@ hir_typeck_suggest_boxing_when_appropriate = store this in the heap by calling `
|
|||||||
|
|
||||||
hir_typeck_suggest_ptr_null_mut = consider using `core::ptr::null_mut` instead
|
hir_typeck_suggest_ptr_null_mut = consider using `core::ptr::null_mut` instead
|
||||||
|
|
||||||
|
hir_typeck_trivial_cast = trivial {$numeric ->
|
||||||
|
[true] numeric cast
|
||||||
|
*[false] cast
|
||||||
|
}: `{$expr_ty}` as `{$cast_ty}`
|
||||||
|
.help = cast can be replaced by coercion; this might require a temporary variable
|
||||||
|
|
||||||
hir_typeck_union_pat_dotdot = `..` cannot be used in union patterns
|
hir_typeck_union_pat_dotdot = `..` cannot be used in union patterns
|
||||||
|
|
||||||
hir_typeck_union_pat_multiple_fields = union patterns should have exactly one field
|
hir_typeck_union_pat_multiple_fields = union patterns should have exactly one field
|
||||||
|
@ -631,31 +631,18 @@ impl<'a, 'tcx> CastCheck<'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn trivial_cast_lint(&self, fcx: &FnCtxt<'a, 'tcx>) {
|
fn trivial_cast_lint(&self, fcx: &FnCtxt<'a, 'tcx>) {
|
||||||
let t_cast = self.cast_ty;
|
let (numeric, lint) = if self.cast_ty.is_numeric() && self.expr_ty.is_numeric() {
|
||||||
let t_expr = self.expr_ty;
|
(true, lint::builtin::TRIVIAL_NUMERIC_CASTS)
|
||||||
let (adjective, lint) = if t_cast.is_numeric() && t_expr.is_numeric() {
|
|
||||||
("numeric ", lint::builtin::TRIVIAL_NUMERIC_CASTS)
|
|
||||||
} else {
|
} else {
|
||||||
("", lint::builtin::TRIVIAL_CASTS)
|
(false, lint::builtin::TRIVIAL_CASTS)
|
||||||
};
|
};
|
||||||
fcx.tcx.struct_span_lint_hir(
|
let expr_ty = fcx.resolve_vars_if_possible(self.expr_ty);
|
||||||
|
let cast_ty = fcx.resolve_vars_if_possible(self.cast_ty);
|
||||||
|
fcx.tcx.emit_spanned_lint(
|
||||||
lint,
|
lint,
|
||||||
self.expr.hir_id,
|
self.expr.hir_id,
|
||||||
self.span,
|
self.span,
|
||||||
DelayDm(|| {
|
errors::TrivialCast { numeric, expr_ty, cast_ty },
|
||||||
format!(
|
|
||||||
"trivial {}cast: `{}` as `{}`",
|
|
||||||
adjective,
|
|
||||||
fcx.ty_to_string(t_expr),
|
|
||||||
fcx.ty_to_string(t_cast)
|
|
||||||
)
|
|
||||||
}),
|
|
||||||
|lint| {
|
|
||||||
lint.help(
|
|
||||||
"cast can be replaced by coercion; this might \
|
|
||||||
require a temporary variable",
|
|
||||||
)
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -533,6 +533,15 @@ pub struct SuggestPtrNullMut {
|
|||||||
pub span: Span,
|
pub span: Span,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(LintDiagnostic)]
|
||||||
|
#[diag(hir_typeck_trivial_cast)]
|
||||||
|
#[help]
|
||||||
|
pub struct TrivialCast<'tcx> {
|
||||||
|
pub numeric: bool,
|
||||||
|
pub expr_ty: Ty<'tcx>,
|
||||||
|
pub cast_ty: Ty<'tcx>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
#[diag(hir_typeck_no_associated_item, code = "E0599")]
|
#[diag(hir_typeck_no_associated_item, code = "E0599")]
|
||||||
pub struct NoAssociatedItem {
|
pub struct NoAssociatedItem {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user