-use crate::utils::{match_qpath, paths, snippet, span_lint_and_sugg};
+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};
then {
let err_type = cx.tables.expr_ty(err_arg);
+ let origin_snippet = if err_arg.span.from_expansion() {
+ snippet_with_macro_callsite(cx, err_arg.span, "_")
+ } else {
+ snippet(cx, err_arg.span, "_")
+ };
let suggestion = if err_type == return_type {
- format!("return Err({})", snippet(cx, err_arg.span, "_"))
+ format!("return Err({})", origin_snippet)
} else {
- format!("return Err({}.into())", snippet(cx, err_arg.span, "_"))
+ format!("return Err({}.into())", origin_snippet)
};
span_lint_and_sugg(