Skip to content

Commit e277165

Browse files
committed
fix: remove entire waitFor call when its body becomes empty after moving side effects
1 parent cd6b1b8 commit e277165

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

lib/rules/no-wait-for-side-effects.ts

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,8 @@ export default createTestingLibraryRule<Options, MessageIds>({
214214
return;
215215
}
216216

217-
getSideEffectNodes(node.body).forEach((sideEffectNode) =>
217+
const sideEffects = getSideEffectNodes(node.body);
218+
sideEffects.forEach((sideEffectNode) =>
218219
context.report({
219220
node: sideEffectNode,
220221
messageId: 'noSideEffectsWaitFor',
@@ -223,11 +224,31 @@ export default createTestingLibraryRule<Options, MessageIds>({
223224
const targetNode = isAwaitExpression(callExpressionNode.parent)
224225
? callExpressionNode.parent
225226
: callExpressionNode;
226-
const lines = sourceCode.getText().split('\n');
227227

228+
const lines = sourceCode.getText().split('\n');
228229
const line = lines[targetNode.loc.start.line - 1];
229-
230230
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+
231252
const lineStart = sourceCode.getIndexFromLoc({
232253
line: sideEffectNode.loc.start.line,
233254
column: 0,
@@ -237,15 +258,10 @@ export default createTestingLibraryRule<Options, MessageIds>({
237258
column: 0,
238259
});
239260

240-
const sideEffectLines = lines.slice(
241-
sideEffectNode.loc.start.line - 1,
242-
sideEffectNode.loc.end.line
243-
);
244-
const sideEffectNodeText = sideEffectLines.join('\n');
245261
return [
246262
fixer.insertTextBefore(
247263
targetNode,
248-
sideEffectNodeText.trimStart() + '\n' + indent
264+
sideEffectNodeText + '\n' + indent
249265
),
250266
fixer.removeRange([lineStart, lineEnd]),
251267
];

0 commit comments

Comments
 (0)