mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-10 15:14:29 +00:00
Ignore unnecessary cast if inside macro
This commit is contained in:
parent
bcf0805614
commit
8eae2d3707
3 changed files with 18 additions and 3 deletions
|
@ -1110,6 +1110,9 @@ fn fp_ty_mantissa_nbits(typ: Ty<'_>) -> u32 {
|
||||||
|
|
||||||
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Casts {
|
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Casts {
|
||||||
fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr) {
|
fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr) {
|
||||||
|
if in_macro(expr.span) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if let ExprKind::Cast(ref ex, _) = expr.node {
|
if let ExprKind::Cast(ref ex, _) = expr.node {
|
||||||
let (cast_from, cast_to) = (cx.tables.expr_ty(ex), cx.tables.expr_ty(expr));
|
let (cast_from, cast_to) = (cx.tables.expr_ty(ex), cx.tables.expr_ty(expr));
|
||||||
lint_fn_to_numeric_cast(cx, expr, ex, cast_from, cast_to);
|
lint_fn_to_numeric_cast(cx, expr, ex, cast_from, cast_to);
|
||||||
|
|
|
@ -48,6 +48,18 @@ fn main() {
|
||||||
1f32 as f32;
|
1f32 as f32;
|
||||||
false as bool;
|
false as bool;
|
||||||
&1i32 as &i32;
|
&1i32 as &i32;
|
||||||
|
// macro version
|
||||||
|
macro_rules! foo {
|
||||||
|
($a:ident, $b:ident) => {
|
||||||
|
pub fn $a() -> $b {
|
||||||
|
1 as $b
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
foo!(a, i32);
|
||||||
|
foo!(b, f32);
|
||||||
|
foo!(c, f64);
|
||||||
|
|
||||||
// casting integer literal to float is unnecessary
|
// casting integer literal to float is unnecessary
|
||||||
100 as f32;
|
100 as f32;
|
||||||
100 as f64;
|
100 as f64;
|
||||||
|
|
|
@ -159,19 +159,19 @@ LL | false as bool;
|
||||||
| ^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^
|
||||||
|
|
||||||
error: casting integer literal to f32 is unnecessary
|
error: casting integer literal to f32 is unnecessary
|
||||||
--> $DIR/cast.rs:52:5
|
--> $DIR/cast.rs:64:5
|
||||||
|
|
|
|
||||||
LL | 100 as f32;
|
LL | 100 as f32;
|
||||||
| ^^^^^^^^^^ help: try: `100_f32`
|
| ^^^^^^^^^^ help: try: `100_f32`
|
||||||
|
|
||||||
error: casting integer literal to f64 is unnecessary
|
error: casting integer literal to f64 is unnecessary
|
||||||
--> $DIR/cast.rs:53:5
|
--> $DIR/cast.rs:65:5
|
||||||
|
|
|
|
||||||
LL | 100 as f64;
|
LL | 100 as f64;
|
||||||
| ^^^^^^^^^^ help: try: `100_f64`
|
| ^^^^^^^^^^ help: try: `100_f64`
|
||||||
|
|
||||||
error: casting integer literal to f64 is unnecessary
|
error: casting integer literal to f64 is unnecessary
|
||||||
--> $DIR/cast.rs:54:5
|
--> $DIR/cast.rs:66:5
|
||||||
|
|
|
|
||||||
LL | 100_i32 as f64;
|
LL | 100_i32 as f64;
|
||||||
| ^^^^^^^^^^^^^^ help: try: `100_f64`
|
| ^^^^^^^^^^^^^^ help: try: `100_f64`
|
||||||
|
|
Loading…
Reference in a new issue