Suppress lint for unsuffixed number casts

This commit is contained in:
Bood Qian 2017-02-16 22:55:41 +08:00
parent afce85e96d
commit 2f00ea3a07
6 changed files with 32 additions and 29 deletions

View 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

View file

@ -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 `..`

View 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,

View file

@ -379,9 +379,9 @@ declare_lint! {
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 @@ declare_lint! {
/// 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 @@ impl LintPass for CastPass {
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()) {

View 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;
}

View 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