@@ -72,6 +72,28 @@ enum RetReplacement {
72
72
Unit ,
73
73
}
74
74
75
+ impl RetReplacement {
76
+ fn sugg_help ( & self ) -> & ' static str {
77
+ match * self {
78
+ Self :: Empty => "remove `return`" ,
79
+ Self :: Block => "replace `return` with an empty block" ,
80
+ Self :: Unit => "replace `return` with a unit value" ,
81
+
82
+ }
83
+ }
84
+ }
85
+
86
+ impl ToString for RetReplacement {
87
+ fn to_string ( & self ) -> String {
88
+ match * self {
89
+ Self :: Empty => "" ,
90
+ Self :: Block => "{}" ,
91
+ Self :: Unit => "()" ,
92
+ }
93
+ . to_string ( )
94
+ }
95
+ }
96
+
75
97
declare_lint_pass ! ( Return => [ LET_AND_RETURN , NEEDLESS_RETURN ] ) ;
76
98
77
99
impl < ' tcx > LateLintPass < ' tcx > for Return {
@@ -221,74 +243,35 @@ fn emit_return_lint(
221
243
if ret_span. from_expansion ( ) {
222
244
return ;
223
245
}
224
- match inner_span {
225
- Some ( inner_span) => {
226
- let mut applicability = Applicability :: MachineApplicable ;
227
- span_lint_hir_and_then (
228
- cx,
229
- NEEDLESS_RETURN ,
230
- emission_place,
231
- ret_span,
232
- "unneeded `return` statement" ,
233
- |diag| {
234
- let ( snippet, _) = snippet_with_context ( cx, inner_span, ret_span. ctxt ( ) , ".." , & mut applicability) ;
235
- diag. span_suggestion ( ret_span, "remove `return`" , snippet, applicability) ;
236
- } ,
237
- ) ;
238
- } ,
239
- None => match replacement {
240
- RetReplacement :: Empty => {
241
- span_lint_hir_and_then (
242
- cx,
243
- NEEDLESS_RETURN ,
244
- emission_place,
245
- ret_span,
246
- "unneeded `return` statement" ,
247
- |diag| {
248
- diag. span_suggestion (
249
- ret_span,
250
- "remove `return`" ,
251
- String :: new ( ) ,
252
- Applicability :: MachineApplicable ,
253
- ) ;
254
- } ,
255
- ) ;
256
- } ,
257
- RetReplacement :: Block => {
258
- span_lint_hir_and_then (
259
- cx,
260
- NEEDLESS_RETURN ,
261
- emission_place,
262
- ret_span,
263
- "unneeded `return` statement" ,
264
- |diag| {
265
- diag. span_suggestion (
266
- ret_span,
267
- "replace `return` with an empty block" ,
268
- "{}" . to_string ( ) ,
269
- Applicability :: MachineApplicable ,
270
- ) ;
271
- } ,
272
- ) ;
246
+ if let Some ( inner_span) = inner_span {
247
+ let mut applicability = Applicability :: MachineApplicable ;
248
+ span_lint_hir_and_then (
249
+ cx,
250
+ NEEDLESS_RETURN ,
251
+ emission_place,
252
+ ret_span,
253
+ "unneeded `return` statement" ,
254
+ |diag| {
255
+ let ( snippet, _) = snippet_with_context ( cx, inner_span, ret_span. ctxt ( ) , ".." , & mut applicability) ;
256
+ diag. span_suggestion ( ret_span, "remove `return`" , snippet, applicability) ;
273
257
} ,
274
- RetReplacement :: Unit => {
275
- span_lint_hir_and_then (
276
- cx,
277
- NEEDLESS_RETURN ,
278
- emission_place,
258
+ ) ;
259
+ } else {
260
+ span_lint_hir_and_then (
261
+ cx,
262
+ NEEDLESS_RETURN ,
263
+ emission_place,
264
+ ret_span,
265
+ "unneeded `return` statement" ,
266
+ |diag| {
267
+ diag. span_suggestion (
279
268
ret_span,
280
- "unneeded `return` statement" ,
281
- |diag| {
282
- diag. span_suggestion (
283
- ret_span,
284
- "replace `return` with a unit value" ,
285
- "()" . to_string ( ) ,
286
- Applicability :: MachineApplicable ,
287
- ) ;
288
- } ,
269
+ replacement. sugg_help ( ) ,
270
+ replacement. to_string ( ) ,
271
+ Applicability :: MachineApplicable ,
289
272
) ;
290
273
} ,
291
- } ,
274
+ )
292
275
}
293
276
}
294
277
0 commit comments