]> git.lizzy.rs Git - rust.git/commitdiff
Suppress lint for unsuffixed number casts
authorBood Qian <bood@glowing.com>
Thu, 16 Feb 2017 14:55:41 +0000 (22:55 +0800)
committerBood Qian <bood@glowing.com>
Thu, 16 Feb 2017 14:55:41 +0000 (22:55 +0800)
CHANGELOG.md
README.md
clippy_lints/src/lib.rs
clippy_lints/src/types.rs
tests/ui/cast.rs
tests/ui/cast.stderr

index a32224c1de1f75ccdc1d249a67d66bf08a8a6e44..e5f7fe4aa9d27e4f8aae6cc72cd5584bbdd778b0 100644 (file)
@@ -293,7 +293,6 @@ All notable changes to this project will be documented in this file.
 [`cast_possible_wrap`]: https://github.com/Manishearth/rust-clippy/wiki#cast_possible_wrap
 [`cast_precision_loss`]: https://github.com/Manishearth/rust-clippy/wiki#cast_precision_loss
 [`cast_sign_loss`]: https://github.com/Manishearth/rust-clippy/wiki#cast_sign_loss
-[`cast_unnecessary`]: https://github.com/Manishearth/rust-clippy/wiki#cast_unnecessary
 [`char_lit_as_u8`]: https://github.com/Manishearth/rust-clippy/wiki#char_lit_as_u8
 [`chars_next_cmp`]: https://github.com/Manishearth/rust-clippy/wiki#chars_next_cmp
 [`clone_double_ref`]: https://github.com/Manishearth/rust-clippy/wiki#clone_double_ref
@@ -445,6 +444,7 @@ All notable changes to this project will be documented in this file.
 [`type_complexity`]: https://github.com/Manishearth/rust-clippy/wiki#type_complexity
 [`unicode_not_nfc`]: https://github.com/Manishearth/rust-clippy/wiki#unicode_not_nfc
 [`unit_cmp`]: https://github.com/Manishearth/rust-clippy/wiki#unit_cmp
+[`unnecessary_cast`]: https://github.com/Manishearth/rust-clippy/wiki#unnecessary_cast
 [`unnecessary_mut_passed`]: https://github.com/Manishearth/rust-clippy/wiki#unnecessary_mut_passed
 [`unnecessary_operation`]: https://github.com/Manishearth/rust-clippy/wiki#unnecessary_operation
 [`unneeded_field_pattern`]: https://github.com/Manishearth/rust-clippy/wiki#unneeded_field_pattern
index a402b87f079c4ef3eb3564286c31798df952a9d6..067368129e8bc87c375e4a89ebc52977f2c7f6ed 100644 (file)
--- a/README.md
+++ b/README.md
@@ -201,7 +201,6 @@ name
 [cast_possible_wrap](https://github.com/Manishearth/rust-clippy/wiki#cast_possible_wrap)                               | allow   | casts that may cause wrapping around the value, e.g `x as i32` where `x: u32` and `x > i32::MAX`
 [cast_precision_loss](https://github.com/Manishearth/rust-clippy/wiki#cast_precision_loss)                             | allow   | casts that cause loss of precision, e.g `x as f32` where `x: u64`
 [cast_sign_loss](https://github.com/Manishearth/rust-clippy/wiki#cast_sign_loss)                                       | allow   | casts from signed types to unsigned types, e.g `x as u32` where `x: i32`
-[cast_unnecessary](https://github.com/Manishearth/rust-clippy/wiki#cast_unnecessary)                                   | warn    | cast to the same type, e.g `x as i32` where `x: i32`
 [char_lit_as_u8](https://github.com/Manishearth/rust-clippy/wiki#char_lit_as_u8)                                       | warn    | casting a character literal to u8
 [chars_next_cmp](https://github.com/Manishearth/rust-clippy/wiki#chars_next_cmp)                                       | warn    | using `.chars().next()` to check if a string starts with a char
 [clone_double_ref](https://github.com/Manishearth/rust-clippy/wiki#clone_double_ref)                                   | warn    | using `clone` on `&&T`
@@ -350,6 +349,7 @@ name
 [type_complexity](https://github.com/Manishearth/rust-clippy/wiki#type_complexity)                                     | warn    | usage of very complex types that might be better factored into `type` definitions
 [unicode_not_nfc](https://github.com/Manishearth/rust-clippy/wiki#unicode_not_nfc)                                     | allow   | using a unicode literal not in NFC normal form (see [unicode tr15](http://www.unicode.org/reports/tr15/) for further information)
 [unit_cmp](https://github.com/Manishearth/rust-clippy/wiki#unit_cmp)                                                   | warn    | comparing unit values
+[unnecessary_cast](https://github.com/Manishearth/rust-clippy/wiki#unnecessary_cast)                                   | warn    | cast to the same type, e.g `x as i32` where `x: i32`
 [unnecessary_mut_passed](https://github.com/Manishearth/rust-clippy/wiki#unnecessary_mut_passed)                       | warn    | an argument passed as a mutable reference although the callee only demands an immutable reference
 [unnecessary_operation](https://github.com/Manishearth/rust-clippy/wiki#unnecessary_operation)                         | warn    | outer expressions with no effect
 [unneeded_field_pattern](https://github.com/Manishearth/rust-clippy/wiki#unneeded_field_pattern)                       | warn    | struct fields bound to a wildcard instead of using `..`
index 93eb449ebe0667b35a627c11df550475324dc02f..59a01d719188ea67707d056c214eb5d41806be3b 100644 (file)
@@ -488,12 +488,12 @@ pub fn register_plugins(reg: &mut rustc_plugin::Registry) {
         transmute::WRONG_TRANSMUTE,
         types::ABSURD_EXTREME_COMPARISONS,
         types::BOX_VEC,
-        types::CAST_UNNECESSARY,
         types::CHAR_LIT_AS_U8,
         types::LET_UNIT_VALUE,
         types::LINKEDLIST,
         types::TYPE_COMPLEXITY,
         types::UNIT_CMP,
+        types::UNNECESSARY_CAST,
         unicode::ZERO_WIDTH_SPACE,
         unsafe_removed_from_name::UNSAFE_REMOVED_FROM_NAME,
         unused_io_amount::UNUSED_IO_AMOUNT,
index 161b2a1226cd8abbed0c17fa24ad5befc5d167d9..c8cd531d364da29117958799d9ec848fd7d69a33 100644 (file)
@@ -379,9 +379,9 @@ fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr) {
      and `x > i32::MAX`"
 }
 
-/// **What it does:** Checks for casts to the same type
+/// **What it does:** Checks for casts to the same type.
 ///
-/// **Why is this bad?** It's just unnecessary
+/// **Why is this bad?** It's just unnecessary.
 ///
 /// **Known problems:** None.
 ///
@@ -390,7 +390,7 @@ fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr) {
 /// let _ = 2i32 as i32
 /// ```
 declare_lint! {
-    pub CAST_UNNECESSARY,
+    pub UNNECESSARY_CAST,
     Warn,
     "cast to the same type, e.g `x as i32` where `x: i32`"
 }
@@ -520,7 +520,7 @@ fn get_lints(&self) -> LintArray {
                     CAST_SIGN_LOSS,
                     CAST_POSSIBLE_TRUNCATION,
                     CAST_POSSIBLE_WRAP,
-                    CAST_UNNECESSARY)
+                    UNNECESSARY_CAST)
     }
 }
 
@@ -528,11 +528,20 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for CastPass {
     fn check_expr(&mut self, cx: &LateContext<'a, 'tcx>, expr: &'tcx Expr) {
         if let ExprCast(ref ex, _) = expr.node {
             let (cast_from, cast_to) = (cx.tables.expr_ty(ex), cx.tables.expr_ty(expr));
-            if cast_from.sty == cast_to.sty && !in_external_macro(cx, expr.span) {
-                span_lint(cx,
-                          CAST_UNNECESSARY,
-                          expr.span,
-                          &format!("casting to the same type is unnecessary ({} -> {})", cast_from, cast_to));
+            if let ExprLit(ref lit) = ex.node {
+                use syntax::ast::{LitKind, LitIntType};
+                match lit.node {
+                    LitKind::Int(_, LitIntType::Unsuffixed) => (),
+                    LitKind::FloatUnsuffixed(_) => (),
+                    _ => {
+                        if cast_from.sty == cast_to.sty && !in_external_macro(cx, expr.span) {
+                            span_lint(cx,
+                                      UNNECESSARY_CAST,
+                                      expr.span,
+                                      &format!("casting to the same type is unnecessary (`{}` -> `{}`)", cast_from, cast_to));
+                        }
+                    }
+                }
             }
             if cast_from.is_numeric() && cast_to.is_numeric() && !in_external_macro(cx, expr.span) {
                 match (cast_from.is_integral(), cast_to.is_integral()) {
index 7b64b50a1caf2a0a8e93046e6af334b54411141f..d63e0b102787e7a54d9fb24a0bc47ff9bbc0774e 100644 (file)
@@ -68,8 +68,10 @@ fn main() {
     false as bool;
     &1i32 as &i32;
 
-    1i32 as i64;      // Should not trigger
-
+    // Should not trigger
+    1i32 as i64;
     let v = vec!(1);
-    &v as &[i32]; // Should not trigger
+    &v as &[i32];
+    1.0 as f64;
+    1 as u64;
 }
index 289d1d0ac4ffcf0698ac82058373a113e134c85c..7238daa2b41165363bec6b2631448ff1de02a87b 100644 (file)
@@ -274,37 +274,29 @@ error: casting i32 to usize may lose the sign of the value
 63 |     1i32 as usize;
    |     ^^^^^^^^^^^^^
 
-warning: casting to the same type is unnecessary (i32 -> i32)
+warning: casting to the same type is unnecessary (`i32` -> `i32`)
   --> $DIR/cast.rs:66:5
    |
 66 |     1i32 as i32;
    |     ^^^^^^^^^^^
    |
-   = note: #[warn(cast_unnecessary)] on by default
+   = note: #[warn(unnecessary_cast)] on by default
 
-warning: casting to the same type is unnecessary (f32 -> f32)
+warning: casting to the same type is unnecessary (`f32` -> `f32`)
   --> $DIR/cast.rs:67:5
    |
 67 |     1f32 as f32;
    |     ^^^^^^^^^^^
    |
-   = note: #[warn(cast_unnecessary)] on by default
+   = note: #[warn(unnecessary_cast)] on by default
 
-warning: casting to the same type is unnecessary (bool -> bool)
+warning: casting to the same type is unnecessary (`bool` -> `bool`)
   --> $DIR/cast.rs:68:5
    |
 68 |     false as bool;
    |     ^^^^^^^^^^^^^
    |
-   = note: #[warn(cast_unnecessary)] on by default
-
-warning: casting to the same type is unnecessary (&i32 -> &i32)
-  --> $DIR/cast.rs:69:5
-   |
-69 |     &1i32 as &i32;
-   |     ^^^^^^^^^^^^^
-   |
-   = note: #[warn(cast_unnecessary)] on by default
+   = note: #[warn(unnecessary_cast)] on by default
 
 error: aborting due to 42 previous errors