@@ -11,7 +11,7 @@ use rustc::middle::const_eval::eval_const_expr_partial;
11
11
use rustc:: middle:: const_eval:: EvalHint :: ExprTypeChecked ;
12
12
13
13
use utils:: { get_item_name, match_path, snippet, get_parent_expr, span_lint} ;
14
- use utils:: { span_help_and_lint , walk_ptrs_ty, is_integer_literal, implements_trait} ;
14
+ use utils:: { span_lint_and_then , walk_ptrs_ty, is_integer_literal, implements_trait} ;
15
15
16
16
/// **What it does:** This lint checks for function arguments and let bindings denoted as `ref`.
17
17
///
@@ -62,16 +62,22 @@ impl LateLintPass for TopLevelRefPass {
62
62
let Some ( ref init) = l. init
63
63
] , {
64
64
let tyopt = if let Some ( ref ty) = l. ty {
65
- format!( ": {:?} " , ty )
65
+ format!( ": {} " , snippet ( cx , ty . span , "_" ) )
66
66
} else {
67
67
"" . to_owned( )
68
68
} ;
69
- span_help_and_lint ( cx,
69
+ span_lint_and_then ( cx,
70
70
TOPLEVEL_REF_ARG ,
71
71
l. pat. span,
72
72
"`ref` on an entire `let` pattern is discouraged, take a reference with & instead" ,
73
- & format!( "try `let {} {}= &{};`" , snippet( cx, i. span, "_" ) ,
74
- tyopt, snippet( cx, init. span, "_" ) )
73
+ |db| {
74
+ db. span_suggestion( s. span,
75
+ "try" ,
76
+ format!( "let {}{} = &{};" ,
77
+ snippet( cx, i. span, "_" ) ,
78
+ tyopt,
79
+ snippet( cx, init. span, "_" ) ) ) ;
80
+ }
75
81
) ;
76
82
}
77
83
} ;
0 commit comments