Skip to content

Commit

Permalink
Auto merge of #4721 - phansch:fix_try_err_in_ext_macro, r=flip1995
Browse files Browse the repository at this point in the history
Don't emit try_err lint in external macros

changelog: Fix [`try_err`] false positive in external macros

Closes #4709
  • Loading branch information
bors committed Oct 24, 2019
2 parents 37ea436 + 52f5290 commit bfef48f
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 7 deletions.
3 changes: 2 additions & 1 deletion clippy_lints/src/try_err.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use crate::utils::{match_qpath, paths, snippet, snippet_with_macro_callsite, span_lint_and_sugg};
use if_chain::if_chain;
use rustc::hir::*;
use rustc::lint::{LateContext, LateLintPass, LintArray, LintPass};
use rustc::lint::{in_external_macro, LateContext, LateLintPass, LintArray, LintPass};
use rustc::ty::Ty;
use rustc::{declare_lint_pass, declare_tool_lint};
use rustc_errors::Applicability;
Expand Down Expand Up @@ -54,6 +54,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for TryErr {
// val,
// };
if_chain! {
if !in_external_macro(cx.tcx.sess, expr.span);
if let ExprKind::Match(ref match_arg, _, MatchSource::TryDesugar) = expr.kind;
if let ExprKind::Call(ref match_fun, ref try_args) = match_arg.kind;
if let ExprKind::Path(ref match_fun_path) = match_fun.kind;
Expand Down
15 changes: 15 additions & 0 deletions tests/ui/auxiliary/macro_rules.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,18 @@ macro_rules! must_use_unit {
fn foo() {}
};
}

#[macro_export]
macro_rules! try_err {
() => {
pub fn try_err_fn() -> Result<i32, i32> {
let err: i32 = 1;
// To avoid warnings during rustfix
if true {
Err(err)?
} else {
Ok(2)
}
}
};
}
7 changes: 7 additions & 0 deletions tests/ui/try_err.fixed
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
// run-rustfix
// aux-build:macro_rules.rs

#![deny(clippy::try_err)]

#[macro_use]
extern crate macro_rules;

// Tests that a simple case works
// Should flag `Err(err)?`
pub fn basic_test() -> Result<i32, i32> {
Expand Down Expand Up @@ -77,6 +81,9 @@ fn main() {
negative_test().unwrap();
closure_matches_test().unwrap();
closure_into_test().unwrap();

// We don't want to lint in external macros
try_err!();
}

macro_rules! bar {
Expand Down
7 changes: 7 additions & 0 deletions tests/ui/try_err.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
// run-rustfix
// aux-build:macro_rules.rs

#![deny(clippy::try_err)]

#[macro_use]
extern crate macro_rules;

// Tests that a simple case works
// Should flag `Err(err)?`
pub fn basic_test() -> Result<i32, i32> {
Expand Down Expand Up @@ -77,6 +81,9 @@ fn main() {
negative_test().unwrap();
closure_matches_test().unwrap();
closure_into_test().unwrap();

// We don't want to lint in external macros
try_err!();
}

macro_rules! bar {
Expand Down
12 changes: 6 additions & 6 deletions tests/ui/try_err.stderr
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
error: returning an `Err(_)` with the `?` operator
--> $DIR/try_err.rs:11:9
--> $DIR/try_err.rs:15:9
|
LL | Err(err)?;
| ^^^^^^^^^ help: try this: `return Err(err)`
|
note: lint level defined here
--> $DIR/try_err.rs:3:9
--> $DIR/try_err.rs:4:9
|
LL | #![deny(clippy::try_err)]
| ^^^^^^^^^^^^^^^

error: returning an `Err(_)` with the `?` operator
--> $DIR/try_err.rs:21:9
--> $DIR/try_err.rs:25:9
|
LL | Err(err)?;
| ^^^^^^^^^ help: try this: `return Err(err.into())`

error: returning an `Err(_)` with the `?` operator
--> $DIR/try_err.rs:41:17
--> $DIR/try_err.rs:45:17
|
LL | Err(err)?;
| ^^^^^^^^^ help: try this: `return Err(err)`

error: returning an `Err(_)` with the `?` operator
--> $DIR/try_err.rs:60:17
--> $DIR/try_err.rs:64:17
|
LL | Err(err)?;
| ^^^^^^^^^ help: try this: `return Err(err.into())`

error: returning an `Err(_)` with the `?` operator
--> $DIR/try_err.rs:96:9
--> $DIR/try_err.rs:103:9
|
LL | Err(foo!())?;
| ^^^^^^^^^^^^ help: try this: `return Err(foo!())`
Expand Down

0 comments on commit bfef48f

Please sign in to comment.