Auto merge of #8596 - Jaic1:unnecessary_cast, r=flip1995
Fix unnecessary_cast suggestion for type aliasses Fix #6923. The [`unnecessary_cast`] lint now will skip casting to non-primitive type. changelog: fix lint [`unnecessary_cast `]
This commit is contained in:
commit
880ff2497d
@ -4,7 +4,8 @@ use clippy_utils::source::snippet_opt;
|
||||
use if_chain::if_chain;
|
||||
use rustc_ast::{LitFloatType, LitIntType, LitKind};
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir::{Expr, ExprKind, Lit, UnOp};
|
||||
use rustc_hir::def::Res;
|
||||
use rustc_hir::{Expr, ExprKind, Lit, QPath, TyKind, UnOp};
|
||||
use rustc_lint::{LateContext, LintContext};
|
||||
use rustc_middle::lint::in_external_macro;
|
||||
use rustc_middle::ty::{self, FloatTy, InferTy, Ty};
|
||||
@ -18,6 +19,17 @@ pub(super) fn check(
|
||||
cast_from: Ty<'_>,
|
||||
cast_to: Ty<'_>,
|
||||
) -> bool {
|
||||
// skip non-primitive type cast
|
||||
if_chain! {
|
||||
if let ExprKind::Cast(_, cast_to) = expr.kind;
|
||||
if let TyKind::Path(QPath::Resolved(_, path)) = &cast_to.kind;
|
||||
if let Res::PrimTy(_) = path.res;
|
||||
then {}
|
||||
else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(lit) = get_numeric_literal(cast_expr) {
|
||||
let literal_str = snippet_opt(cx, cast_expr.span).unwrap_or_default();
|
||||
|
||||
|
@ -30,4 +30,10 @@ fn main() {
|
||||
|
||||
// do not lint cast to cfg-dependant type
|
||||
1 as std::os::raw::c_char;
|
||||
|
||||
// do not lint cast to alias type
|
||||
1 as I32Alias;
|
||||
&1 as &I32Alias;
|
||||
}
|
||||
|
||||
type I32Alias = i32;
|
||||
|
@ -42,4 +42,9 @@ fn main() {
|
||||
|
||||
let _ = -1_i32;
|
||||
let _ = -1.0_f32;
|
||||
|
||||
let _ = 1 as I32Alias;
|
||||
let _ = &1 as &I32Alias;
|
||||
}
|
||||
|
||||
type I32Alias = i32;
|
||||
|
@ -42,4 +42,9 @@ fn main() {
|
||||
|
||||
let _ = -1 as i32;
|
||||
let _ = -1.0 as f32;
|
||||
|
||||
let _ = 1 as I32Alias;
|
||||
let _ = &1 as &I32Alias;
|
||||
}
|
||||
|
||||
type I32Alias = i32;
|
||||
|
Loading…
x
Reference in New Issue
Block a user