Skip to content

Commit a6a3ad4

Browse files
authored
feat: no-useless-backreference support v flag (#17408)
* feat: `no-useless-backreference` support `v` flag * test: change test case
1 parent 94954a7 commit a6a3ad4

2 files changed

Lines changed: 13 additions & 2 deletions

File tree

lib/rules/no-useless-backreference.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ module.exports = {
9595
let regExpAST;
9696

9797
try {
98-
regExpAST = parser.parsePattern(pattern, 0, pattern.length, flags.includes("u"));
98+
regExpAST = parser.parsePattern(pattern, 0, pattern.length, { unicode: flags.includes("u"), unicodeSets: flags.includes("v") });
9999
} catch {
100100

101101
// Ignore regular expressions with syntax errors

tests/lib/rules/no-useless-backreference.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,11 @@ ruleTester.run("no-useless-backreference", rule, {
142142
String.raw`new RegExp('\\1(a)\\2', 'ug')`, // \1 would be an error, but \2 is syntax error because of the 'u' flag
143143
String.raw`const flags = 'gus'; RegExp('\\1(a){', flags);`, // \1 would be an error, but the rule is aware of the 'u' flag so this is a syntax error
144144
String.raw`RegExp('\\1(a)\\k<foo>', 'u')`, // \1 would be an error, but \k<foo> produces syntax error because of the u flag
145-
String.raw`new RegExp('\\k<foo>(?<foo>a)\\k<bar>')` // \k<foo> would be an error, but \k<bar> produces syntax error because group <bar> doesn't exist
145+
String.raw`new RegExp('\\k<foo>(?<foo>a)\\k<bar>')`, // \k<foo> would be an error, but \k<bar> produces syntax error because group <bar> doesn't exist
146+
147+
// ES2024
148+
String.raw`new RegExp('([[A--B]])\\1', 'v')`,
149+
String.raw`new RegExp('[[]\\1](a)', 'v')` // SyntaxError
146150
],
147151

148152
invalid: [
@@ -508,6 +512,13 @@ ruleTester.run("no-useless-backreference", rule, {
508512
{
509513
code: String.raw`const r = RegExp, p = '\\1', s = '(a)'; new r(p + s);`,
510514
errors: [{ messageId: "forward", data: { bref: String.raw`\1`, group: String.raw`(a)` }, type: "NewExpression" }]
515+
},
516+
517+
518+
// ES2024
519+
{
520+
code: String.raw`new RegExp('\\1([[A--B]])', 'v')`,
521+
errors: [{ messageId: "forward", data: { bref: String.raw`\1`, group: String.raw`([[A--B]])` }, type: "NewExpression" }]
511522
}
512523
]
513524
});

0 commit comments

Comments
 (0)