Skip to content

Commit

Permalink
Refactor: Use more generator functions for fix (#750)
Browse files Browse the repository at this point in the history
  • Loading branch information
fisker committed May 27, 2020
1 parent 754fc47 commit 16f6ef3
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 75 deletions.
24 changes: 9 additions & 15 deletions rules/custom-error-definition.js
Expand Up @@ -122,25 +122,19 @@ const customErrorDefinition = (context, node) => {
context.report({
node: superExpression,
message: 'Pass the error message to `super()` instead of setting `this.message`.',
fix: fixer => {
const fixings = [];
* fix(fixer) {
if (superExpression.expression.arguments.length === 0) {
const rhs = expression.expression.right;
fixings.push(
fixer.insertTextAfterRange([
superExpression.range[0],
superExpression.range[0] + 6
], rhs.raw || rhs.name)
);
yield fixer.insertTextAfterRange([
superExpression.range[0],
superExpression.range[0] + 6
], rhs.raw || rhs.name);
}

fixings.push(
fixer.removeRange([
messageExpressionIndex === 0 ? constructorBodyNode.range[0] : constructorBody[messageExpressionIndex - 1].range[1],
expression.range[1]
])
);
return fixings;
yield fixer.removeRange([
messageExpressionIndex === 0 ? constructorBodyNode.range[0] : constructorBody[messageExpressionIndex - 1].range[1],
expression.range[1]
]);
}
});
}
Expand Down
36 changes: 16 additions & 20 deletions rules/prefer-flat-map.js
Expand Up @@ -97,34 +97,30 @@ const reportFlatMap = (context, nodeFlat, nodeMap) => {
context.report({
node: nodeFlat,
messageId: MESSAGE_ID_FLATMAP,
fix: fixer => {
const fixings = [
// Removes:
// map(…).flat();
// ^^^^^^^
// (map(…)).flat();
// ^^^^^^^
fixer.removeRange([fixStart, fixEnd]),

// Renames:
// map(…).flat();
// ^^^
// (map(…)).flat();
// ^^^
fixer.replaceText(mapProperty, 'flatMap')
];
* fix(fixer) {
// Removes:
// map(…).flat();
// ^^^^^^^
// (map(…)).flat();
// ^^^^^^^
yield fixer.removeRange([fixStart, fixEnd]);

// Renames:
// map(…).flat();
// ^^^
// (map(…)).flat();
// ^^^
yield fixer.replaceText(mapProperty, 'flatMap');

if (hasSemicolon) {
// Moves semicolon to:
// map(…).flat();
// ^
// (map(…)).flat();
// ^
fixings.push(fixer.insertTextAfter(beforeSemicolon, ';'));
fixings.push(fixer.remove(maybeSemicolon));
yield fixer.insertTextAfter(beforeSemicolon, ';');
yield fixer.remove(maybeSemicolon);
}

return fixings;
}
});
};
Expand Down
10 changes: 5 additions & 5 deletions rules/prefer-negative-index.js
Expand Up @@ -288,13 +288,13 @@ const create = context => ({
context.report({
node,
message: `Prefer negative index over length minus index for \`${method}\`.`,
fix(fixer) {
* fix(fixer) {
const sourceCode = context.getSourceCode();
return removableNodes.map(
node => fixer.removeRange(
for (const node of removableNodes) {
yield fixer.removeRange(
getRemovalRange(node, sourceCode)
)
);
);
}
}
});
}
Expand Down
46 changes: 19 additions & 27 deletions rules/prefer-query-selector.js
Expand Up @@ -16,7 +16,7 @@ const getQuotedReplacement = (node, value) => {
return `${leftQuote}${value}${rightQuote}`;
};

const getLiteralFix = (fixer, node, identifierName) => {
function * getLiteralFix(fixer, node, identifierName) {
let replacement = node.raw;
if (identifierName === 'getElementById') {
replacement = getQuotedReplacement(node, getReplacementForId(node.value));
Expand All @@ -26,37 +26,29 @@ const getLiteralFix = (fixer, node, identifierName) => {
replacement = getQuotedReplacement(node, getReplacementForClass(node.value));
}

return [fixer.replaceText(node, replacement)];
};
yield fixer.replaceText(node, replacement);
}

const getTemplateLiteralFix = (fixer, node, identifierName) => {
const fix = [
fixer.insertTextAfter(node, '`'),
fixer.insertTextBefore(node, '`')
];
function * getTemplateLiteralFix(fixer, node, identifierName) {
yield fixer.insertTextAfter(node, '`');
yield fixer.insertTextBefore(node, '`');

node.quasis.forEach(templateElement => {
for (const templateElement of node.quasis) {
if (identifierName === 'getElementById') {
fix.push(
fixer.replaceText(
templateElement,
getReplacementForId(templateElement.value.cooked)
)
yield fixer.replaceText(
templateElement,
getReplacementForId(templateElement.value.cooked)
);
}

if (identifierName === 'getElementsByClassName') {
fix.push(
fixer.replaceText(
templateElement,
getReplacementForClass(templateElement.value.cooked)
)
yield fixer.replaceText(
templateElement,
getReplacementForClass(templateElement.value.cooked)
);
}
});

return fix;
};
}
}

const canBeFixed = node => {
if (node.type === 'Literal') {
Expand Down Expand Up @@ -88,10 +80,10 @@ const fix = (node, identifierName, preferedSelector) => {
}

const getArgumentFix = nodeToBeFixed.type === 'Literal' ? getLiteralFix : getTemplateLiteralFix;
return fixer => [
...getArgumentFix(fixer, nodeToBeFixed, identifierName),
fixer.replaceText(node.callee.property, preferedSelector)
];
return function * (fixer) {
yield * getArgumentFix(fixer, nodeToBeFixed, identifierName);
yield fixer.replaceText(node.callee.property, preferedSelector);
};
};

const create = context => {
Expand Down
13 changes: 8 additions & 5 deletions rules/prefer-set-has.js
Expand Up @@ -163,11 +163,14 @@ const create = context => {
data: {
name: node.name
},
fix: fixer => [
fixer.insertTextBefore(node.parent.init, 'new Set('),
fixer.insertTextAfter(node.parent.init, ')'),
...identifiers.map(identifier => fixer.replaceText(identifier.parent.property, 'has'))
]
* fix(fixer) {
yield fixer.insertTextBefore(node.parent.init, 'new Set(');
yield fixer.insertTextAfter(node.parent.init, ')');

for (const identifier of identifiers) {
yield fixer.replaceText(identifier.parent.property, 'has');
}
}
});
}
};
Expand Down
7 changes: 4 additions & 3 deletions rules/prevent-abbreviations.js
Expand Up @@ -625,9 +625,10 @@ const create = context => {
generatedNames.add(replacement);
}

problem.fix = fixer => {
return getVariableIdentifiers(variable)
.map(identifier => renameIdentifier(identifier, replacement, fixer, sourceCode));
problem.fix = function * (fixer) {
for (const identifier of getVariableIdentifiers(variable)) {
yield renameIdentifier(identifier, replacement, fixer, sourceCode);
}
};
}

Expand Down

0 comments on commit 16f6ef3

Please sign in to comment.