@@ -176,25 +176,28 @@ impl<'a> Sugg<'a> {
176
176
}
177
177
178
178
/// 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 {
180
186
use rustc_ast:: ast:: RangeLimits ;
181
187
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) ]
190
189
match expr. kind {
190
+ _ if expr. span . ctxt ( ) != ctxt => Sugg :: NonParen ( snippet_with_context ( cx, expr. span , ctxt, default, app) . 0 ) ,
191
191
ast:: ExprKind :: AddrOf ( ..)
192
192
| ast:: ExprKind :: Box ( ..)
193
193
| ast:: ExprKind :: Closure { .. }
194
194
| ast:: ExprKind :: If ( ..)
195
195
| ast:: ExprKind :: Let ( ..)
196
196
| 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
+ } ,
198
201
ast:: ExprKind :: Async ( ..)
199
202
| ast:: ExprKind :: Block ( ..)
200
203
| ast:: ExprKind :: Break ( ..)
@@ -224,45 +227,49 @@ impl<'a> Sugg<'a> {
224
227
| ast:: ExprKind :: Array ( ..)
225
228
| ast:: ExprKind :: While ( ..)
226
229
| 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 ) ,
228
231
ast:: ExprKind :: Range ( ref lhs, ref rhs, RangeLimits :: HalfOpen ) => Sugg :: BinOp (
229
232
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
+ } ) ,
234
239
) ,
235
240
ast:: ExprKind :: Range ( ref lhs, ref rhs, RangeLimits :: Closed ) => Sugg :: BinOp (
236
241
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
+ } ) ,
241
248
) ,
242
249
ast:: ExprKind :: Assign ( ref lhs, ref rhs, _) => Sugg :: BinOp (
243
250
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 ,
246
253
) ,
247
254
ast:: ExprKind :: AssignOp ( op, ref lhs, ref rhs) => Sugg :: BinOp (
248
255
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 ,
251
258
) ,
252
259
ast:: ExprKind :: Binary ( op, ref lhs, ref rhs) => Sugg :: BinOp (
253
260
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 ,
256
263
) ,
257
264
ast:: ExprKind :: Cast ( ref lhs, ref ty) => Sugg :: BinOp (
258
265
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 ,
261
268
) ,
262
269
ast:: ExprKind :: Type ( ref lhs, ref ty) => Sugg :: BinOp (
263
270
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 ,
266
273
) ,
267
274
}
268
275
}
0 commit comments