11use clippy_utils:: diagnostics:: span_lint_and_then;
22use clippy_utils:: get_enclosing_block;
3- use clippy_utils:: source:: snippet ;
3+ use clippy_utils:: source:: snippet_with_context ;
44use clippy_utils:: ty:: { implements_trait, is_copy} ;
55use rustc_errors:: Applicability ;
66use rustc_hir:: def:: Res ;
@@ -61,12 +61,13 @@ pub(crate) fn check<'tcx>(
6161 e. span ,
6262 "needlessly taken reference of both operands" ,
6363 |diag| {
64- let lsnip = snippet ( cx, l. span , "..." ) . to_string ( ) ;
65- let rsnip = snippet ( cx, r. span , "..." ) . to_string ( ) ;
64+ let mut applicability = Applicability :: MachineApplicable ;
65+ let ( lsnip, _) = snippet_with_context ( cx, l. span , e. span . ctxt ( ) , "..." , & mut applicability) ;
66+ let ( rsnip, _) = snippet_with_context ( cx, r. span , e. span . ctxt ( ) , "..." , & mut applicability) ;
6667 diag. multipart_suggestion (
6768 "use the values directly" ,
68- vec ! [ ( left. span, lsnip) , ( right. span, rsnip) ] ,
69- Applicability :: MachineApplicable ,
69+ vec ! [ ( left. span, lsnip. to_string ( ) ) , ( right. span, rsnip. to_string ( ) ) ] ,
70+ applicability ,
7071 ) ;
7172 } ,
7273 ) ;
@@ -80,13 +81,9 @@ pub(crate) fn check<'tcx>(
8081 e. span ,
8182 "needlessly taken reference of left operand" ,
8283 |diag| {
83- let lsnip = snippet ( cx, l. span , "..." ) . to_string ( ) ;
84- diag. span_suggestion (
85- left. span ,
86- "use the left value directly" ,
87- lsnip,
88- Applicability :: MachineApplicable ,
89- ) ;
84+ let mut applicability = Applicability :: MachineApplicable ;
85+ let ( lsnip, _) = snippet_with_context ( cx, l. span , e. span . ctxt ( ) , "..." , & mut applicability) ;
86+ diag. span_suggestion ( left. span , "use the left value directly" , lsnip, applicability) ;
9087 } ,
9188 ) ;
9289 } else if !lcpy
@@ -99,7 +96,8 @@ pub(crate) fn check<'tcx>(
9996 e. span ,
10097 "needlessly taken reference of right operand" ,
10198 |diag| {
102- let rsnip = snippet ( cx, r. span , "..." ) . to_string ( ) ;
99+ let mut applicability = Applicability :: MachineApplicable ;
100+ let ( rsnip, _) = snippet_with_context ( cx, r. span , e. span . ctxt ( ) , "..." , & mut applicability) ;
103101 diag. span_suggestion (
104102 right. span ,
105103 "use the right value directly" ,
@@ -131,7 +129,8 @@ pub(crate) fn check<'tcx>(
131129 e. span ,
132130 "needlessly taken reference of left operand" ,
133131 |diag| {
134- let lsnip = snippet ( cx, l. span , "..." ) . to_string ( ) ;
132+ let mut applicability = Applicability :: MachineApplicable ;
133+ let ( lsnip, _) = snippet_with_context ( cx, l. span , e. span . ctxt ( ) , "..." , & mut applicability) ;
135134 diag. span_suggestion (
136135 left. span ,
137136 "use the left value directly" ,
@@ -158,7 +157,8 @@ pub(crate) fn check<'tcx>(
158157 && implements_trait ( cx, cx. typeck_results ( ) . expr_ty ( left) , trait_id, & [ rty. into ( ) ] )
159158 {
160159 span_lint_and_then ( cx, OP_REF , e. span , "taken reference of right operand" , |diag| {
161- let rsnip = snippet ( cx, r. span , "..." ) . to_string ( ) ;
160+ let mut applicability = Applicability :: MachineApplicable ;
161+ let ( rsnip, _) = snippet_with_context ( cx, r. span , e. span . ctxt ( ) , "..." , & mut applicability) ;
162162 diag. span_suggestion (
163163 right. span ,
164164 "use the right value directly" ,
0 commit comments