Skip to content

Commit 16f6ef3

Browse files
authored
Refactor: Use more generator functions for fix (#750)
1 parent 754fc47 commit 16f6ef3

File tree

6 files changed

+61
-75
lines changed

6 files changed

+61
-75
lines changed

rules/custom-error-definition.js

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -122,25 +122,19 @@ const customErrorDefinition = (context, node) => {
122122
context.report({
123123
node: superExpression,
124124
message: 'Pass the error message to `super()` instead of setting `this.message`.',
125-
fix: fixer => {
126-
const fixings = [];
125+
* fix(fixer) {
127126
if (superExpression.expression.arguments.length === 0) {
128127
const rhs = expression.expression.right;
129-
fixings.push(
130-
fixer.insertTextAfterRange([
131-
superExpression.range[0],
132-
superExpression.range[0] + 6
133-
], rhs.raw || rhs.name)
134-
);
128+
yield fixer.insertTextAfterRange([
129+
superExpression.range[0],
130+
superExpression.range[0] + 6
131+
], rhs.raw || rhs.name);
135132
}
136133

137-
fixings.push(
138-
fixer.removeRange([
139-
messageExpressionIndex === 0 ? constructorBodyNode.range[0] : constructorBody[messageExpressionIndex - 1].range[1],
140-
expression.range[1]
141-
])
142-
);
143-
return fixings;
134+
yield fixer.removeRange([
135+
messageExpressionIndex === 0 ? constructorBodyNode.range[0] : constructorBody[messageExpressionIndex - 1].range[1],
136+
expression.range[1]
137+
]);
144138
}
145139
});
146140
}

rules/prefer-flat-map.js

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -97,34 +97,30 @@ const reportFlatMap = (context, nodeFlat, nodeMap) => {
9797
context.report({
9898
node: nodeFlat,
9999
messageId: MESSAGE_ID_FLATMAP,
100-
fix: fixer => {
101-
const fixings = [
102-
// Removes:
103-
// map(…).flat();
104-
// ^^^^^^^
105-
// (map(…)).flat();
106-
// ^^^^^^^
107-
fixer.removeRange([fixStart, fixEnd]),
108-
109-
// Renames:
110-
// map(…).flat();
111-
// ^^^
112-
// (map(…)).flat();
113-
// ^^^
114-
fixer.replaceText(mapProperty, 'flatMap')
115-
];
100+
* fix(fixer) {
101+
// Removes:
102+
// map(…).flat();
103+
// ^^^^^^^
104+
// (map(…)).flat();
105+
// ^^^^^^^
106+
yield fixer.removeRange([fixStart, fixEnd]);
107+
108+
// Renames:
109+
// map(…).flat();
110+
// ^^^
111+
// (map(…)).flat();
112+
// ^^^
113+
yield fixer.replaceText(mapProperty, 'flatMap');
116114

117115
if (hasSemicolon) {
118116
// Moves semicolon to:
119117
// map(…).flat();
120118
// ^
121119
// (map(…)).flat();
122120
// ^
123-
fixings.push(fixer.insertTextAfter(beforeSemicolon, ';'));
124-
fixings.push(fixer.remove(maybeSemicolon));
121+
yield fixer.insertTextAfter(beforeSemicolon, ';');
122+
yield fixer.remove(maybeSemicolon);
125123
}
126-
127-
return fixings;
128124
}
129125
});
130126
};

rules/prefer-negative-index.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -288,13 +288,13 @@ const create = context => ({
288288
context.report({
289289
node,
290290
message: `Prefer negative index over length minus index for \`${method}\`.`,
291-
fix(fixer) {
291+
* fix(fixer) {
292292
const sourceCode = context.getSourceCode();
293-
return removableNodes.map(
294-
node => fixer.removeRange(
293+
for (const node of removableNodes) {
294+
yield fixer.removeRange(
295295
getRemovalRange(node, sourceCode)
296-
)
297-
);
296+
);
297+
}
298298
}
299299
});
300300
}

rules/prefer-query-selector.js

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const getQuotedReplacement = (node, value) => {
1616
return `${leftQuote}${value}${rightQuote}`;
1717
};
1818

19-
const getLiteralFix = (fixer, node, identifierName) => {
19+
function * getLiteralFix(fixer, node, identifierName) {
2020
let replacement = node.raw;
2121
if (identifierName === 'getElementById') {
2222
replacement = getQuotedReplacement(node, getReplacementForId(node.value));
@@ -26,37 +26,29 @@ const getLiteralFix = (fixer, node, identifierName) => {
2626
replacement = getQuotedReplacement(node, getReplacementForClass(node.value));
2727
}
2828

29-
return [fixer.replaceText(node, replacement)];
30-
};
29+
yield fixer.replaceText(node, replacement);
30+
}
3131

32-
const getTemplateLiteralFix = (fixer, node, identifierName) => {
33-
const fix = [
34-
fixer.insertTextAfter(node, '`'),
35-
fixer.insertTextBefore(node, '`')
36-
];
32+
function * getTemplateLiteralFix(fixer, node, identifierName) {
33+
yield fixer.insertTextAfter(node, '`');
34+
yield fixer.insertTextBefore(node, '`');
3735

38-
node.quasis.forEach(templateElement => {
36+
for (const templateElement of node.quasis) {
3937
if (identifierName === 'getElementById') {
40-
fix.push(
41-
fixer.replaceText(
42-
templateElement,
43-
getReplacementForId(templateElement.value.cooked)
44-
)
38+
yield fixer.replaceText(
39+
templateElement,
40+
getReplacementForId(templateElement.value.cooked)
4541
);
4642
}
4743

4844
if (identifierName === 'getElementsByClassName') {
49-
fix.push(
50-
fixer.replaceText(
51-
templateElement,
52-
getReplacementForClass(templateElement.value.cooked)
53-
)
45+
yield fixer.replaceText(
46+
templateElement,
47+
getReplacementForClass(templateElement.value.cooked)
5448
);
5549
}
56-
});
57-
58-
return fix;
59-
};
50+
}
51+
}
6052

6153
const canBeFixed = node => {
6254
if (node.type === 'Literal') {
@@ -88,10 +80,10 @@ const fix = (node, identifierName, preferedSelector) => {
8880
}
8981

9082
const getArgumentFix = nodeToBeFixed.type === 'Literal' ? getLiteralFix : getTemplateLiteralFix;
91-
return fixer => [
92-
...getArgumentFix(fixer, nodeToBeFixed, identifierName),
93-
fixer.replaceText(node.callee.property, preferedSelector)
94-
];
83+
return function * (fixer) {
84+
yield * getArgumentFix(fixer, nodeToBeFixed, identifierName);
85+
yield fixer.replaceText(node.callee.property, preferedSelector);
86+
};
9587
};
9688

9789
const create = context => {

rules/prefer-set-has.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,11 +163,14 @@ const create = context => {
163163
data: {
164164
name: node.name
165165
},
166-
fix: fixer => [
167-
fixer.insertTextBefore(node.parent.init, 'new Set('),
168-
fixer.insertTextAfter(node.parent.init, ')'),
169-
...identifiers.map(identifier => fixer.replaceText(identifier.parent.property, 'has'))
170-
]
166+
* fix(fixer) {
167+
yield fixer.insertTextBefore(node.parent.init, 'new Set(');
168+
yield fixer.insertTextAfter(node.parent.init, ')');
169+
170+
for (const identifier of identifiers) {
171+
yield fixer.replaceText(identifier.parent.property, 'has');
172+
}
173+
}
171174
});
172175
}
173176
};

rules/prevent-abbreviations.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -625,9 +625,10 @@ const create = context => {
625625
generatedNames.add(replacement);
626626
}
627627

628-
problem.fix = fixer => {
629-
return getVariableIdentifiers(variable)
630-
.map(identifier => renameIdentifier(identifier, replacement, fixer, sourceCode));
628+
problem.fix = function * (fixer) {
629+
for (const identifier of getVariableIdentifiers(variable)) {
630+
yield renameIdentifier(identifier, replacement, fixer, sourceCode);
631+
}
631632
};
632633
}
633634

0 commit comments

Comments
 (0)