@@ -214,7 +214,8 @@ export default createTestingLibraryRule<Options, MessageIds>({
214
214
return ;
215
215
}
216
216
217
- getSideEffectNodes ( node . body ) . forEach ( ( sideEffectNode ) =>
217
+ const sideEffects = getSideEffectNodes ( node . body ) ;
218
+ sideEffects . forEach ( ( sideEffectNode ) =>
218
219
context . report ( {
219
220
node : sideEffectNode ,
220
221
messageId : 'noSideEffectsWaitFor' ,
@@ -223,11 +224,31 @@ export default createTestingLibraryRule<Options, MessageIds>({
223
224
const targetNode = isAwaitExpression ( callExpressionNode . parent )
224
225
? callExpressionNode . parent
225
226
: callExpressionNode ;
226
- const lines = sourceCode . getText ( ) . split ( '\n' ) ;
227
227
228
+ const lines = sourceCode . getText ( ) . split ( '\n' ) ;
228
229
const line = lines [ targetNode . loc . start . line - 1 ] ;
229
-
230
230
const indent = line . match ( / ^ \s * / ) ?. [ 0 ] ?? '' ;
231
+ const sideEffectLines = lines . slice (
232
+ sideEffectNode . loc . start . line - 1 ,
233
+ sideEffectNode . loc . end . line
234
+ ) ;
235
+ const sideEffectNodeText = sideEffectLines . join ( '\n' ) . trimStart ( ) ;
236
+ if (
237
+ sideEffects . length === node . body . length &&
238
+ sideEffects . length === 1
239
+ ) {
240
+ const tokenAfter = sourceCode . getTokenAfter ( targetNode ) ;
241
+ return [
242
+ fixer . insertTextBefore ( targetNode , sideEffectNodeText ) ,
243
+ tokenAfter ?. value === ';'
244
+ ? fixer . removeRange ( [
245
+ targetNode . range [ 0 ] ,
246
+ tokenAfter . range [ 1 ] ,
247
+ ] )
248
+ : fixer . remove ( targetNode ) ,
249
+ ] ;
250
+ }
251
+
231
252
const lineStart = sourceCode . getIndexFromLoc ( {
232
253
line : sideEffectNode . loc . start . line ,
233
254
column : 0 ,
@@ -237,15 +258,10 @@ export default createTestingLibraryRule<Options, MessageIds>({
237
258
column : 0 ,
238
259
} ) ;
239
260
240
- const sideEffectLines = lines . slice (
241
- sideEffectNode . loc . start . line - 1 ,
242
- sideEffectNode . loc . end . line
243
- ) ;
244
- const sideEffectNodeText = sideEffectLines . join ( '\n' ) ;
245
261
return [
246
262
fixer . insertTextBefore (
247
263
targetNode ,
248
- sideEffectNodeText . trimStart ( ) + '\n' + indent
264
+ sideEffectNodeText + '\n' + indent
249
265
) ,
250
266
fixer . removeRange ( [ lineStart , lineEnd ] ) ,
251
267
] ;
0 commit comments