Skip to content

Commit

Permalink
feat: Add fixer for missing regex unicode flag
Browse files Browse the repository at this point in the history
  • Loading branch information
mathiasvr committed Nov 9, 2021
1 parent 9ff21fb commit 81f6c21
Showing 1 changed file with 23 additions and 4 deletions.
27 changes: 23 additions & 4 deletions lib/rules/no-misleading-character-class.js
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,8 @@ module.exports = {

schema: [],

fixable: "whitespace",

messages: {
surrogatePairWithoutUFlag: "Unexpected surrogate pair in character class. Use 'u' flag.",
combiningClass: "Unexpected combined character in character class.",
Expand All @@ -126,9 +128,10 @@ module.exports = {
* @param {Node} node The node to report.
* @param {string} pattern The regular expression pattern to verify.
* @param {string} flags The flags of the regular expression.
* @param {Function} unicodeFixer Fixer for missing "u" flag.
* @returns {void}
*/
function verify(node, pattern, flags) {
function verify(node, pattern, flags, unicodeFixer) {
let patternNode;

try {
Expand Down Expand Up @@ -159,13 +162,17 @@ module.exports = {
});

for (const kind of foundKinds) {
context.report({ node, messageId: kind });
context.report({
node,
messageId: kind,
fix: kind === "surrogatePairWithoutUFlag" && unicodeFixer
});
}
}

return {
"Literal[regex]"(node) {
verify(node, node.regex.pattern, node.regex.flags);
verify(node, node.regex.pattern, node.regex.flags, fixer => fixer.insertTextAfter(node, "u"));
},
"Program"() {
const scope = context.getScope();
Expand All @@ -184,7 +191,19 @@ module.exports = {
const flags = getStringIfConstant(flagsNode, scope);

if (typeof pattern === "string") {
verify(node, pattern, flags || "");
verify(node, pattern, flags || "", fixer => {
if (node.arguments.length === 1) {
return fixer.insertTextAfterRange(patternNode.range, ', "u"');
}

if (flagsNode.type === "Literal" || flagsNode.type === "TemplateLiteral") {
const range = [flagsNode.range[0], flagsNode.range[1] - 1];

return fixer.insertTextAfterRange(range, "u");
}

return null;
});
}
}
}
Expand Down

0 comments on commit 81f6c21

Please sign in to comment.