Auto merge of #4355 - lzutao:macro_expn_try_err, r=flip1995

Fix macro expansion in try_err lint

Fixes #4309

changelog: none
This commit is contained in:
bors 2019-08-08 15:16:17 +00:00
commit 4465e2fbb8
4 changed files with 54 additions and 5 deletions

View file

@ -1,4 +1,4 @@
use crate::utils::{match_qpath, paths, snippet, span_lint_and_sugg};
use crate::utils::{in_macro_or_desugar, 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};
@ -67,10 +67,15 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for TryErr {
then {
let err_type = cx.tables.expr_ty(err_arg);
let suggestion = if err_type == return_type {
format!("return Err({})", snippet(cx, err_arg.span, "_"))
let origin_snippet = if in_macro_or_desugar(err_arg.span) {
snippet_with_macro_callsite(cx, err_arg.span, "_")
} else {
format!("return Err({}.into())", snippet(cx, err_arg.span, "_"))
snippet(cx, err_arg.span, "_")
};
let suggestion = if err_type == return_type {
format!("return Err({})", origin_snippet)
} else {
format!("return Err({}.into())", origin_snippet)
};
span_lint_and_sugg(