Skip to content

Commit bc56ef0

Browse files
authored
Add support for v flag to regexp/unicode-escape and regexp/prefer-unicode-codepoint-escapes rules (#592)
1 parent a7689af commit bc56ef0

6 files changed

+72
-4
lines changed

.changeset/early-guests-hug.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"eslint-plugin-regexp": minor
3+
---
4+
5+
Add support for v flag to `regexp/prefer-unicode-codepoint-escapes` rule

.changeset/large-dingos-allow.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"eslint-plugin-regexp": minor
3+
---
4+
5+
Add support for v flag to `regexp/unicode-escape` rule

lib/rules/prefer-unicode-codepoint-escapes.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export default createRule("prefer-unicode-codepoint-escapes", {
2323
): RegExpVisitor.Handlers {
2424
const { node, flags, getRegexpLocation, fixReplaceNode } =
2525
regexpContext
26-
if (!flags.unicode) {
26+
if (!flags.unicode && !flags.unicodeSets) {
2727
return {}
2828
}
2929
return {

lib/rules/unicode-escape.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export default createRule("unicode-escape", {
8888
regexpContext: RegExpContext,
8989
): RegExpVisitor.Handlers {
9090
const { flags } = regexpContext
91-
if (!flags.unicode) {
91+
if (!flags.unicode && !flags.unicodeSets) {
9292
return {}
9393
}
9494
return {

tests/lib/rules/prefer-unicode-codepoint-escapes.ts

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import rule from "../../../lib/rules/prefer-unicode-codepoint-escapes"
33

44
const tester = new RuleTester({
55
parserOptions: {
6-
ecmaVersion: 2020,
6+
ecmaVersion: "latest",
77
sourceType: "module",
88
},
99
})
@@ -15,6 +15,8 @@ tester.run("prefer-unicode-codepoint-escapes", rule as any, {
1515
String.raw`/[\ud83d\ude00]/`,
1616
String.raw`/\u{1f600}/u`,
1717
String.raw`/😀/u`,
18+
String.raw`/\u{1f600}/v`,
19+
String.raw`/😀/v`,
1820
],
1921
invalid: [
2022
{
@@ -75,5 +77,19 @@ tester.run("prefer-unicode-codepoint-escapes", rule as any, {
7577
"Use Unicode codepoint escapes instead of Unicode escapes using surrogate pairs.",
7678
],
7779
},
80+
{
81+
code: String.raw`/\ud83d\ude00/v`,
82+
output: String.raw`/\u{1f600}/v`,
83+
errors: [
84+
{
85+
message:
86+
"Use Unicode codepoint escapes instead of Unicode escapes using surrogate pairs.",
87+
line: 1,
88+
column: 2,
89+
endLine: 1,
90+
endColumn: 14,
91+
},
92+
],
93+
},
7894
],
7995
})

tests/lib/rules/unicode-escape.ts

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import rule from "../../../lib/rules/unicode-escape"
33

44
const tester = new RuleTester({
55
parserOptions: {
6-
ecmaVersion: 2020,
6+
ecmaVersion: "latest",
77
sourceType: "module",
88
},
99
})
@@ -19,6 +19,14 @@ tester.run("unicode-escape", rule as any, {
1919
code: String.raw`/a \x0a \cM \0 \u0100 \u00ff \ud83d\ude00 \u{1f600}/u`,
2020
options: ["unicodeEscape"],
2121
},
22+
{
23+
code: String.raw`/a \x0a \cM \0 \u{ff} \u{100} \ud83d\ude00 \u{1f600}/v`,
24+
options: ["unicodeCodePointEscape"],
25+
},
26+
{
27+
code: String.raw`/a \x0a \cM \0 \u0100 \u00ff \ud83d\ude00 \u{1f600}/v`,
28+
options: ["unicodeEscape"],
29+
},
2230

2331
// no u flag
2432
{
@@ -77,5 +85,39 @@ tester.run("unicode-escape", rule as any, {
7785
},
7886
],
7987
},
88+
{
89+
code: String.raw`/a \x0a \cM \0 \u0100 \u00ff \ud83d\ude00 \u{1f600}/v`,
90+
output: String.raw`/a \x0a \cM \0 \u{100} \u{ff} \ud83d\ude00 \u{1f600}/v`,
91+
options: ["unicodeCodePointEscape"],
92+
errors: [
93+
{
94+
message:
95+
"Expected unicode code point escape ('\\u{100}'), but unicode escape ('\\u0100') is used.",
96+
column: 16,
97+
},
98+
{
99+
message:
100+
"Expected unicode code point escape ('\\u{ff}'), but unicode escape ('\\u00ff') is used.",
101+
column: 23,
102+
},
103+
],
104+
},
105+
{
106+
code: String.raw`/a \x0a \cM \0 \u{ff} \u{100} \ud83d\ude00 \u{1f600}/v`,
107+
output: String.raw`/a \x0a \cM \0 \u00ff \u0100 \ud83d\ude00 \u{1f600}/v`,
108+
options: ["unicodeEscape"],
109+
errors: [
110+
{
111+
message:
112+
"Expected unicode escape ('\\u00ff'), but unicode code point escape ('\\u{ff}') is used.",
113+
column: 16,
114+
},
115+
{
116+
message:
117+
"Expected unicode escape ('\\u0100'), but unicode code point escape ('\\u{100}') is used.",
118+
column: 23,
119+
},
120+
],
121+
},
80122
],
81123
})

0 commit comments

Comments
 (0)