Use snippet_with_macro_callsite suggested by flip1995
This commit is contained in:
parent
0487b58f9a
commit
90a7b60413
@ -1,11 +1,10 @@
|
||||
use crate::utils::{in_macro_or_desugar, 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};
|
||||
use rustc::ty::Ty;
|
||||
use rustc::{declare_lint_pass, declare_tool_lint};
|
||||
use rustc_errors::Applicability;
|
||||
use syntax::source_map::Span;
|
||||
|
||||
declare_clippy_lint! {
|
||||
/// **What it does:** Checks for usages of `Err(x)?`.
|
||||
@ -68,15 +67,15 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for TryErr {
|
||||
|
||||
then {
|
||||
let err_type = cx.tables.expr_ty(err_arg);
|
||||
let span = if in_macro_or_desugar(err_arg.span) {
|
||||
span_to_outer_expn(err_arg.span)
|
||||
let origin_snippet = if in_macro_or_desugar(err_arg.span) {
|
||||
snippet_with_macro_callsite(cx, err_arg.span, "_")
|
||||
} else {
|
||||
err_arg.span
|
||||
snippet(cx, err_arg.span, "_")
|
||||
};
|
||||
let suggestion = if err_type == return_type {
|
||||
format!("return Err({})", snippet(cx, span, "_"))
|
||||
format!("return Err({})", origin_snippet)
|
||||
} else {
|
||||
format!("return Err({}.into())", snippet(cx, span, "_"))
|
||||
format!("return Err({}.into())", origin_snippet)
|
||||
};
|
||||
|
||||
span_lint_and_sugg(
|
||||
@ -93,14 +92,6 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for TryErr {
|
||||
}
|
||||
}
|
||||
|
||||
fn span_to_outer_expn(span: Span) -> Span {
|
||||
let mut span = span;
|
||||
while let Some(expr) = span.ctxt().outer_expn_info() {
|
||||
span = expr.call_site;
|
||||
}
|
||||
span
|
||||
}
|
||||
|
||||
// In order to determine whether to suggest `.into()` or not, we need to find the error type the
|
||||
// function returns. To do that, we look for the From::from call (see tree above), and capture
|
||||
// its output type.
|
||||
|
Loading…
x
Reference in New Issue
Block a user