Auto merge of #4388 - flip1995:rustup, r=phansch

Rustup

Supersedes #4387 and #4385

This removes tests with the `try!` macro in them completely. There is no need for Clippy to support the `try!` macro, since it is deprecated now.

[`StmtKind`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc/hir/enum.StmtKind.html) got a new variant [`Semi`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc/hir/enum.StmtKind.html#variant.Semi), which Just Works with the `author` lint. Nice.

changelog: none
This commit is contained in:
bors 2019-08-15 09:13:51 +00:00
commit 34457fbd8b
16 changed files with 43 additions and 56 deletions

View File

@ -43,10 +43,9 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnportableVariant {
if cx.tcx.data_layout.pointer_size.bits() != 64 { if cx.tcx.data_layout.pointer_size.bits() != 64 {
return; return;
} }
if let ItemKind::Enum(ref def, _) = item.node { if let ItemKind::Enum(def, _) = &item.node {
for var in &def.variants { for var in &def.variants {
let variant = &var.node; if let Some(anon_const) = &var.disr_expr {
if let Some(ref anon_const) = variant.disr_expr {
let param_env = ty::ParamEnv::empty(); let param_env = ty::ParamEnv::empty();
let def_id = cx.tcx.hir().body_owner_def_id(anon_const.body); let def_id = cx.tcx.hir().body_owner_def_id(anon_const.body);
let substs = InternalSubsts::identity_for_item(cx.tcx.global_tcx(), def_id); let substs = InternalSubsts::identity_for_item(cx.tcx.global_tcx(), def_id);

View File

@ -123,7 +123,7 @@ impl_lint_pass!(EnumVariantNames => [
]); ]);
fn var2str(var: &Variant) -> LocalInternedString { fn var2str(var: &Variant) -> LocalInternedString {
var.node.ident.as_str() var.ident.as_str()
} }
/// Returns the number of chars that match from the start /// Returns the number of chars that match from the start

View File

@ -85,7 +85,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for LargeEnumVariant {
"large size difference between variants", "large size difference between variants",
|db| { |db| {
if variant.fields.len() == 1 { if variant.fields.len() == 1 {
let span = match def.variants[i].node.data { let span = match def.variants[i].data {
VariantData::Struct(ref fields, ..) | VariantData::Tuple(ref fields, ..) => { VariantData::Struct(ref fields, ..) | VariantData::Tuple(ref fields, ..) => {
fields[0].ty.span fields[0].ty.span
}, },

View File

@ -197,6 +197,6 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for MissingDoc {
} }
fn check_variant(&mut self, cx: &LateContext<'a, 'tcx>, v: &'tcx hir::Variant, _: &hir::Generics) { fn check_variant(&mut self, cx: &LateContext<'a, 'tcx>, v: &'tcx hir::Variant, _: &hir::Generics) {
self.check_missing_docs_attrs(cx, &v.node.attrs, v.span, "a variant"); self.check_missing_docs_attrs(cx, &v.attrs, v.span, "a variant");
} }
} }

View File

@ -91,7 +91,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Author {
} }
fn check_variant(&mut self, cx: &LateContext<'a, 'tcx>, var: &'tcx hir::Variant, generics: &hir::Generics) { fn check_variant(&mut self, cx: &LateContext<'a, 'tcx>, var: &'tcx hir::Variant, generics: &hir::Generics) {
if !has_attr(cx.sess(), &var.node.attrs) { if !has_attr(cx.sess(), &var.attrs) {
return; return;
} }
prelude(); prelude();

View File

@ -1,4 +1,5 @@
#![feature(stmt_expr_attributes)] #![feature(stmt_expr_attributes)]
#![allow(redundant_semicolon)]
#[rustfmt::skip] #[rustfmt::skip]
fn main() { fn main() {

View File

@ -1,10 +1,16 @@
error: statement with no effect error: statement with no effect
--> $DIR/blocks.rs:14:5 --> $DIR/blocks.rs:8:9
| |
LL | -x; LL | ;;;;
| ^^^ | ^^^^
| |
= note: `-D clippy::no-effect` implied by `-D warnings` = note: `-D clippy::no-effect` implied by `-D warnings`
error: aborting due to previous error error: statement with no effect
--> $DIR/blocks.rs:15:5
|
LL | -x;
| ^^^
error: aborting due to 2 previous errors

View File

@ -1,7 +1,10 @@
if_chain! { if_chain! {
if let ExprKind::Block(ref block) = expr.node; if let ExprKind::Block(ref block) = expr.node;
if let Some(trailing_expr) = &block.expr; if let Some(trailing_expr) = &block.expr;
if block.stmts.len() == 0; if block.stmts.len() == 1;
if let StmtKind::Semi(ref e, _) = block.stmts[0].node
if let ExprKind::Tup(ref elements) = e.node;
if elements.len() == 0;
then { then {
// report your lint here // report your lint here
} }

View File

@ -322,14 +322,14 @@ fn try_() -> Result<i32, &'static str> {
#[clippy::cognitive_complexity = "0"] #[clippy::cognitive_complexity = "0"]
fn try_again() -> Result<i32, &'static str> { fn try_again() -> Result<i32, &'static str> {
let _ = r#try!(Ok(42)); let _ = Ok(42)?;
let _ = r#try!(Ok(43)); let _ = Ok(43)?;
let _ = r#try!(Ok(44)); let _ = Ok(44)?;
let _ = r#try!(Ok(45)); let _ = Ok(45)?;
let _ = r#try!(Ok(46)); let _ = Ok(46)?;
let _ = r#try!(Ok(47)); let _ = Ok(47)?;
let _ = r#try!(Ok(48)); let _ = Ok(48)?;
let _ = r#try!(Ok(49)); let _ = Ok(49)?;
match 5 { match 5 {
5 => Ok(5), 5 => Ok(5),
_ => return Err("bla"), _ => return Err("bla"),

View File

@ -230,9 +230,9 @@ error: the function has a cognitive complexity of 1
--> $DIR/cognitive_complexity.rs:324:1 --> $DIR/cognitive_complexity.rs:324:1
| |
LL | / fn try_again() -> Result<i32, &'static str> { LL | / fn try_again() -> Result<i32, &'static str> {
LL | | let _ = r#try!(Ok(42)); LL | | let _ = Ok(42)?;
LL | | let _ = r#try!(Ok(43)); LL | | let _ = Ok(43)?;
LL | | let _ = r#try!(Ok(44)); LL | | let _ = Ok(44)?;
... | ... |
LL | | } LL | | }
LL | | } LL | | }

View File

@ -215,10 +215,10 @@ fn if_same_then_else() -> Result<&'static str, ()> {
}; };
if true { if true {
r#try!(Ok("foo")); Ok("foo")?;
} else { } else {
//~ ERROR same body as `if` block //~ ERROR same body as `if` block
r#try!(Ok("foo")); Ok("foo")?;
} }
if true { if true {

View File

@ -197,7 +197,7 @@ error: this `if` has identical blocks
LL | } else { LL | } else {
| ____________^ | ____________^
LL | | //~ ERROR same body as `if` block LL | | //~ ERROR same body as `if` block
LL | | r#try!(Ok("foo")); LL | | Ok("foo")?;
LL | | } LL | | }
| |_____^ | |_____^
| |
@ -206,7 +206,7 @@ note: same as this
| |
LL | if true { LL | if true {
| _____________^ | _____________^
LL | | r#try!(Ok("foo")); LL | | Ok("foo")?;
LL | | } else { LL | | } else {
| |_____^ | |_____^

View File

@ -19,5 +19,5 @@ fn main() {
#[allow(clippy::needless_return)] #[allow(clippy::needless_return)]
(|| return 2)(); (|| return 2)();
(|| -> Option<i32> { None? })(); (|| -> Option<i32> { None? })();
(|| -> Result<i32, i32> { r#try!(Err(2)) })(); (|| -> Result<i32, i32> { Err(2)? })();
} }

View File

@ -1,5 +1,5 @@
#![warn(clippy::all)] #![warn(clippy::all)]
#![allow(clippy::blacklisted_name, unused_assignments)] #![allow(clippy::blacklisted_name, clippy::no_effect, redundant_semicolon, unused_assignments)]
struct Foo(u32); struct Foo(u32);

View File

@ -3,13 +3,6 @@
use std::io; use std::io;
fn try_macro<T: io::Read + io::Write>(s: &mut T) -> io::Result<()> {
r#try!(s.write(b"test"));
let mut buf = [0u8; 4];
r#try!(s.read(&mut buf));
Ok(())
}
fn question_mark<T: io::Read + io::Write>(s: &mut T) -> io::Result<()> { fn question_mark<T: io::Read + io::Write>(s: &mut T) -> io::Result<()> {
s.write(b"test")?; s.write(b"test")?;
let mut buf = [0u8; 4]; let mut buf = [0u8; 4];

View File

@ -1,43 +1,28 @@
error: handle written amount returned or use `Write::write_all` instead error: handle written amount returned or use `Write::write_all` instead
--> $DIR/unused_io_amount.rs:7:5 --> $DIR/unused_io_amount.rs:7:5
| |
LL | r#try!(s.write(b"test")); LL | s.write(b"test")?;
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
| |
= note: `-D clippy::unused-io-amount` implied by `-D warnings` = note: `-D clippy::unused-io-amount` implied by `-D warnings`
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error: handle read amount returned or use `Read::read_exact` instead error: handle read amount returned or use `Read::read_exact` instead
--> $DIR/unused_io_amount.rs:9:5 --> $DIR/unused_io_amount.rs:9:5
| |
LL | r#try!(s.read(&mut buf));
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error: handle written amount returned or use `Write::write_all` instead
--> $DIR/unused_io_amount.rs:14:5
|
LL | s.write(b"test")?;
| ^^^^^^^^^^^^^^^^^
error: handle read amount returned or use `Read::read_exact` instead
--> $DIR/unused_io_amount.rs:16:5
|
LL | s.read(&mut buf)?; LL | s.read(&mut buf)?;
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
error: handle written amount returned or use `Write::write_all` instead error: handle written amount returned or use `Write::write_all` instead
--> $DIR/unused_io_amount.rs:21:5 --> $DIR/unused_io_amount.rs:14:5
| |
LL | s.write(b"test").unwrap(); LL | s.write(b"test").unwrap();
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
error: handle read amount returned or use `Read::read_exact` instead error: handle read amount returned or use `Read::read_exact` instead
--> $DIR/unused_io_amount.rs:23:5 --> $DIR/unused_io_amount.rs:16:5
| |
LL | s.read(&mut buf).unwrap(); LL | s.read(&mut buf).unwrap();
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
error: aborting due to 6 previous errors error: aborting due to 4 previous errors