Ignore unnecessary cast if inside macro

This commit is contained in:
cemil 2019-04-24 16:02:38 +02:00
parent bcf0805614
commit 8eae2d3707
3 changed files with 18 additions and 3 deletions

View file

@ -1110,6 +1110,9 @@ fn fp_ty_mantissa_nbits(typ: Ty<'_>) -> u32 {
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Casts {
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 {
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);

View file

@ -48,6 +48,18 @@ fn main() {
1f32 as f32;
false as bool;
&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
100 as f32;
100 as f64;

View file

@ -159,19 +159,19 @@ LL | false as bool;
| ^^^^^^^^^^^^^
error: casting integer literal to f32 is unnecessary
--> $DIR/cast.rs:52:5
--> $DIR/cast.rs:64:5
|
LL | 100 as f32;
| ^^^^^^^^^^ help: try: `100_f32`
error: casting integer literal to f64 is unnecessary
--> $DIR/cast.rs:53:5
--> $DIR/cast.rs:65:5
|
LL | 100 as f64;
| ^^^^^^^^^^ help: try: `100_f64`
error: casting integer literal to f64 is unnecessary
--> $DIR/cast.rs:54:5
--> $DIR/cast.rs:66:5
|
LL | 100_i32 as f64;
| ^^^^^^^^^^^^^^ help: try: `100_f64`