ota-meshi / eslint-plugin-regexp

ESLint plugin for finding regex mistakes and style guide violations.
https://ota-meshi.github.io/eslint-plugin-regexp/
MIT License
701 stars 10 forks source link

Add `regexp/no-misleading-backreference` #751

Open ota-meshi opened 5 months ago

ota-meshi commented 5 months ago

Motivation

ES2025 now allows duplicate named capturing groups. But using numbers to backreference them seems very hard to read and misleading, so I'd like to add a rule to disallow that.

Description

The new rule will flag as an error if a numbered backreference refers to a duplicate named capturing group.

Examples

/* ✓ GOOD */
/^(?:(?<foo>a)|(?<foo>b))\k<foo>$/u.test('aa'); // true
/^(?:(?<foo>a)|(?<foo>b))\k<foo>$/u.test('bb'); // true

/* ✗ BAD */
/^(?:(?<foo>a)|(?<foo>b))\1$/u.test('aa'); // true
/^(?:(?<foo>a)|(?<foo>b))\1$/u.test('bb'); // false

Maybe there's a better rule name 🤔

fisker commented 5 months ago

How about prefer-named-backreference with option to report only if backreference is duplicate names.

ota-meshi commented 5 months ago

Hmm... I think the purpose is a bit different from prefer-named-backreference, which always recommends named backreferences, because we don't know whether users should change backreferences or rename named capturing groups in response to the new rule report.