@@ -176,25 +176,28 @@ impl<'a> Sugg<'a> {
176176 }
177177
178178 /// Prepare a suggestion from an expression.
179- pub fn ast ( cx : & EarlyContext < ' _ > , expr : & ast:: Expr , default : & ' a str ) -> Self {
179+ pub fn ast (
180+ cx : & EarlyContext < ' _ > ,
181+ expr : & ast:: Expr ,
182+ default : & ' a str ,
183+ ctxt : SyntaxContext ,
184+ app : & mut Applicability ,
185+ ) -> Self {
180186 use rustc_ast:: ast:: RangeLimits ;
181187
182- let snippet_without_expansion = |cx, span : Span , default| {
183- if span. from_expansion ( ) {
184- snippet_with_macro_callsite ( cx, span, default)
185- } else {
186- snippet ( cx, span, default)
187- }
188- } ;
189-
188+ #[ expect( clippy:: match_wildcard_for_single_variants) ]
190189 match expr. kind {
190+ _ if expr. span . ctxt ( ) != ctxt => Sugg :: NonParen ( snippet_with_context ( cx, expr. span , ctxt, default, app) . 0 ) ,
191191 ast:: ExprKind :: AddrOf ( ..)
192192 | ast:: ExprKind :: Box ( ..)
193193 | ast:: ExprKind :: Closure { .. }
194194 | ast:: ExprKind :: If ( ..)
195195 | ast:: ExprKind :: Let ( ..)
196196 | ast:: ExprKind :: Unary ( ..)
197- | ast:: ExprKind :: Match ( ..) => Sugg :: MaybeParen ( snippet_without_expansion ( cx, expr. span , default) ) ,
197+ | ast:: ExprKind :: Match ( ..) => match snippet_with_context ( cx, expr. span , ctxt, default, app) {
198+ ( snip, false ) => Sugg :: MaybeParen ( snip) ,
199+ ( snip, true ) => Sugg :: NonParen ( snip) ,
200+ } ,
198201 ast:: ExprKind :: Async ( ..)
199202 | ast:: ExprKind :: Block ( ..)
200203 | ast:: ExprKind :: Break ( ..)
@@ -224,45 +227,49 @@ impl<'a> Sugg<'a> {
224227 | ast:: ExprKind :: Array ( ..)
225228 | ast:: ExprKind :: While ( ..)
226229 | ast:: ExprKind :: Await ( ..)
227- | ast:: ExprKind :: Err => Sugg :: NonParen ( snippet_without_expansion ( cx, expr. span , default) ) ,
230+ | ast:: ExprKind :: Err => Sugg :: NonParen ( snippet_with_context ( cx, expr. span , ctxt , default, app ) . 0 ) ,
228231 ast:: ExprKind :: Range ( ref lhs, ref rhs, RangeLimits :: HalfOpen ) => Sugg :: BinOp (
229232 AssocOp :: DotDot ,
230- lhs. as_ref ( )
231- . map_or ( "" . into ( ) , |lhs| snippet_without_expansion ( cx, lhs. span , default) ) ,
232- rhs. as_ref ( )
233- . map_or ( "" . into ( ) , |rhs| snippet_without_expansion ( cx, rhs. span , default) ) ,
233+ lhs. as_ref ( ) . map_or ( "" . into ( ) , |lhs| {
234+ snippet_with_context ( cx, lhs. span , ctxt, default, app) . 0
235+ } ) ,
236+ rhs. as_ref ( ) . map_or ( "" . into ( ) , |rhs| {
237+ snippet_with_context ( cx, rhs. span , ctxt, default, app) . 0
238+ } ) ,
234239 ) ,
235240 ast:: ExprKind :: Range ( ref lhs, ref rhs, RangeLimits :: Closed ) => Sugg :: BinOp (
236241 AssocOp :: DotDotEq ,
237- lhs. as_ref ( )
238- . map_or ( "" . into ( ) , |lhs| snippet_without_expansion ( cx, lhs. span , default) ) ,
239- rhs. as_ref ( )
240- . map_or ( "" . into ( ) , |rhs| snippet_without_expansion ( cx, rhs. span , default) ) ,
242+ lhs. as_ref ( ) . map_or ( "" . into ( ) , |lhs| {
243+ snippet_with_context ( cx, lhs. span , ctxt, default, app) . 0
244+ } ) ,
245+ rhs. as_ref ( ) . map_or ( "" . into ( ) , |rhs| {
246+ snippet_with_context ( cx, rhs. span , ctxt, default, app) . 0
247+ } ) ,
241248 ) ,
242249 ast:: ExprKind :: Assign ( ref lhs, ref rhs, _) => Sugg :: BinOp (
243250 AssocOp :: Assign ,
244- snippet_without_expansion ( cx, lhs. span , default) ,
245- snippet_without_expansion ( cx, rhs. span , default) ,
251+ snippet_with_context ( cx, lhs. span , ctxt , default, app ) . 0 ,
252+ snippet_with_context ( cx, rhs. span , ctxt , default, app ) . 0 ,
246253 ) ,
247254 ast:: ExprKind :: AssignOp ( op, ref lhs, ref rhs) => Sugg :: BinOp (
248255 astbinop2assignop ( op) ,
249- snippet_without_expansion ( cx, lhs. span , default) ,
250- snippet_without_expansion ( cx, rhs. span , default) ,
256+ snippet_with_context ( cx, lhs. span , ctxt , default, app ) . 0 ,
257+ snippet_with_context ( cx, rhs. span , ctxt , default, app ) . 0 ,
251258 ) ,
252259 ast:: ExprKind :: Binary ( op, ref lhs, ref rhs) => Sugg :: BinOp (
253260 AssocOp :: from_ast_binop ( op. node ) ,
254- snippet_without_expansion ( cx, lhs. span , default) ,
255- snippet_without_expansion ( cx, rhs. span , default) ,
261+ snippet_with_context ( cx, lhs. span , ctxt , default, app ) . 0 ,
262+ snippet_with_context ( cx, rhs. span , ctxt , default, app ) . 0 ,
256263 ) ,
257264 ast:: ExprKind :: Cast ( ref lhs, ref ty) => Sugg :: BinOp (
258265 AssocOp :: As ,
259- snippet_without_expansion ( cx, lhs. span , default) ,
260- snippet_without_expansion ( cx, ty. span , default) ,
266+ snippet_with_context ( cx, lhs. span , ctxt , default, app ) . 0 ,
267+ snippet_with_context ( cx, ty. span , ctxt , default, app ) . 0 ,
261268 ) ,
262269 ast:: ExprKind :: Type ( ref lhs, ref ty) => Sugg :: BinOp (
263270 AssocOp :: Colon ,
264- snippet_without_expansion ( cx, lhs. span , default) ,
265- snippet_without_expansion ( cx, ty. span , default) ,
271+ snippet_with_context ( cx, lhs. span , ctxt , default, app ) . 0 ,
272+ snippet_with_context ( cx, ty. span , ctxt , default, app ) . 0 ,
266273 ) ,
267274 }
268275 }
0 commit comments