Skip to content

Add more v flag tests #627

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Oct 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/thin-insects-cover.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"eslint-plugin-regexp": patch
---

Add more `v` flag tests
11 changes: 10 additions & 1 deletion tests/lib/rules/no-useless-assertions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/no-useless-assertions"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand Down Expand Up @@ -67,6 +67,15 @@ tester.run("no-useless-assertions", rule as any, {
},
],
},
{
code: String.raw`/a\b[\q{foo}]/v`,
errors: [
{
message:
"'\\b' will always reject because it is preceded by a word character and followed by a word character.",
},
],
},
{
code: String.raw`/,\b,/`,
errors: [
Expand Down
6 changes: 5 additions & 1 deletion tests/lib/rules/no-useless-backreference.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/no-useless-backreference"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand Down Expand Up @@ -31,6 +31,10 @@ tester.run("no-useless-backreference", rule as any, {
code: "/(\\b)a\\1/",
errors: [{ messageId: "empty" }],
},
{
code: "/([\\q{}])a\\1/v",
errors: [{ messageId: "empty" }],
},
{
code: "/(\\b|a{0})a\\1/",
errors: [{ messageId: "empty" }],
Expand Down
4 changes: 3 additions & 1 deletion tests/lib/rules/no-useless-flag.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { rules } from "../../../lib/utils/rules"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand Down Expand Up @@ -218,6 +218,8 @@ tester.run("no-useless-flag", rule as any, {
const orig = /\w/i; // eslint-disable-line
const clone = new RegExp(orig);
`,
String.raw`/a/u`,
String.raw`/a/v`,
],
invalid: [
// i
Expand Down
12 changes: 11 additions & 1 deletion tests/lib/rules/no-useless-lazy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/no-useless-lazy"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand Down Expand Up @@ -34,6 +34,11 @@ tester.run("no-useless-lazy", rule as any, {
},
],
},
{
code: `/a{1}?/v`,
output: `/a{1}/v`,
errors: [{ messageId: "constant" }],
},
{
code: `/a{4}?/`,
output: `/a{4}/`,
Expand Down Expand Up @@ -72,6 +77,11 @@ tester.run("no-useless-lazy", rule as any, {
output: `/a+b+/`,
errors: [{ messageId: "possessive" }],
},
{
code: String.raw`/[\q{aa|ab}]+?b+/v`,
output: String.raw`/[\q{aa|ab}]+b+/v`,
errors: [{ messageId: "possessive" }],
},
{
code: `/a*?b+/`,
output: `/a*b+/`,
Expand Down
15 changes: 14 additions & 1 deletion tests/lib/rules/no-useless-non-capturing-group.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/no-useless-non-capturing-group"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand Down Expand Up @@ -91,6 +91,19 @@ tester.run("no-useless-non-capturing-group", rule as any, {
},
],
},
{
code: `/(?:abcd)/v.test(str)`,
output: `/abcd/v.test(str)`,
errors: [
{
message: "Unexpected quantifier Non-capturing group.",
line: 1,
column: 2,
endLine: 1,
endColumn: 5,
},
],
},
{
code: `/(?:[abcd])/.test(str)`,
output: `/[abcd]/.test(str)`,
Expand Down
17 changes: 16 additions & 1 deletion tests/lib/rules/no-useless-quantifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/no-useless-quantifier"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand Down Expand Up @@ -45,6 +45,21 @@ tester.run("no-useless-quantifier", rule as any, {
},
],
},
{
code: String.raw`/(?:[\q{}])+/v`,
output: null,
errors: [
{
messageId: "empty",
suggestions: [
{
messageId: "remove",
output: String.raw`/(?:[\q{}])/v`,
},
],
},
],
},
{
code: String.raw`/(?:|(?:)){5,9}/`,
output: null,
Expand Down
16 changes: 15 additions & 1 deletion tests/lib/rules/no-useless-range.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/no-useless-range"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand All @@ -23,6 +23,13 @@ tester.run("no-useless-range", rule as any, {
},
],
},
{
code: `/[a-a]/v`,
output: `/[a]/v`,
errors: [
"Unexpected unnecessary character ranges. The hyphen is unnecessary.",
],
},
{
code: `/[a-b]/`,
output: `/[ab]/`,
Expand All @@ -35,6 +42,13 @@ tester.run("no-useless-range", rule as any, {
},
],
},
{
code: `/[a-b]/v`,
output: `/[ab]/v`,
errors: [
"Unexpected unnecessary character ranges. The hyphen is unnecessary.",
],
},
{
code: `/[a-a-c-c]/`,
output: `/[a\\-c]/`,
Expand Down
7 changes: 6 additions & 1 deletion tests/lib/rules/no-useless-two-nums-quantifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/no-useless-two-nums-quantifier"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand Down Expand Up @@ -42,5 +42,10 @@ tester.run("no-useless-two-nums-quantifier", rule as any, {
output: "/a{100}?/",
errors: ["Unexpected quantifier '{100,100}'."],
},
{
code: "/a{100,100}?/v",
output: "/a{100}?/v",
errors: 1,
},
],
})
11 changes: 10 additions & 1 deletion tests/lib/rules/no-zero-quantifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/no-zero-quantifier"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand All @@ -22,6 +22,15 @@ tester.run("no-zero-quantifier", rule as any, {
},
],
},
{
code: `/a{0}/v`,
errors: [
{
messageId: "unexpected",
suggestions: [{ output: `/(?:)/v` }],
},
],
},
{
code: `/a{0,0}/`,
errors: [
Expand Down
13 changes: 12 additions & 1 deletion tests/lib/rules/optimal-lookaround-quantifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/optimal-lookaround-quantifier"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand All @@ -22,6 +22,17 @@ tester.run("optimal-lookaround-quantifier", rule as any, {
},
],
},
{
code: `/(?=ba*)/v`,
errors: [
{
message:
"The quantified expression 'a*' at the end of the expression tree should only be matched a constant number of times. The expression can be removed without affecting the lookaround.",
column: 6,
suggestions: [{ output: `/(?=b)/v` }],
},
],
},
{
code: `/(?=(?:a|b|abc*))/`,
errors: [
Expand Down
6 changes: 5 additions & 1 deletion tests/lib/rules/prefer-escape-replacement-dollar-char.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/prefer-escape-replacement-dollar-char"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand Down Expand Up @@ -34,6 +34,10 @@ tester.run("prefer-escape-replacement-dollar-char", rule as any, {
},
],
},
{
code: `'€1,234'.replace(/€/v, '$'); // "$1,234"`,
errors: 1,
},
{
code: `'€1,234'.replaceAll(/€/, '$'); // "$1,234"`,
errors: [
Expand Down
9 changes: 8 additions & 1 deletion tests/lib/rules/prefer-lookaround.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/prefer-lookaround"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand Down Expand Up @@ -544,6 +544,13 @@ tester.run("prefer-lookaround", rule as any, {
},
],
},
{
code: String.raw`var str = 'Java'.replace(/(?:^|\b|[\q{}])(J)ava/gv, '$1Query')`,
output: String.raw`var str = 'Java'.replace(/(?<=(?:^|\b|[\q{}])J)ava/gv, 'Query')`,
errors: [
"This capturing group can be replaced with a lookbehind assertion ('(?<=(?:^|\\b|[\\q{}])J)').",
],
},
{
code: `var str = 'JavaScriptCode'.replace(/(?<=Java)(Script)Code/g, '$1Linter')`,
output: `var str = 'JavaScriptCode'.replace(/(?<=JavaScript)Code/g, 'Linter')`,
Expand Down
7 changes: 6 additions & 1 deletion tests/lib/rules/prefer-named-backreference.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/prefer-named-backreference"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand All @@ -16,5 +16,10 @@ tester.run("prefer-named-backreference", rule as any, {
output: `/(?<foo>a)\\k<foo>/`,
errors: [{ messageId: "unexpected" }],
},
{
code: `/(?<foo>a)\\1/v`,
output: `/(?<foo>a)\\k<foo>/v`,
errors: [{ messageId: "unexpected" }],
},
],
})
8 changes: 7 additions & 1 deletion tests/lib/rules/prefer-named-capture-group.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/prefer-named-capture-group"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand All @@ -22,5 +22,11 @@ tester.run("prefer-named-capture-group", rule as any, {
"Capture group '(foo)' should be converted to a named or non-capturing group.",
],
},
{
code: String.raw`/(foo)/v`,
errors: [
"Capture group '(foo)' should be converted to a named or non-capturing group.",
],
},
],
})
7 changes: 6 additions & 1 deletion tests/lib/rules/prefer-named-replacement.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/prefer-named-replacement"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand Down Expand Up @@ -34,6 +34,11 @@ tester.run("prefer-named-replacement", rule as any, {
},
],
},
{
code: `"str".replace(/a(?<foo>b)c/v, "_$1_")`,
output: `"str".replace(/a(?<foo>b)c/v, "_$<foo>_")`,
errors: ["Unexpected indexed reference in replacement string."],
},
{
code: `"str".replaceAll(/a(?<foo>b)c/, "_$1_")`,
output: `"str".replaceAll(/a(?<foo>b)c/, "_$<foo>_")`,
Expand Down
7 changes: 6 additions & 1 deletion tests/lib/rules/prefer-plus-quantifier.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import rule from "../../../lib/rules/prefer-plus-quantifier"

const tester = new RuleTester({
parserOptions: {
ecmaVersion: 2020,
ecmaVersion: "latest",
sourceType: "module",
},
})
Expand Down Expand Up @@ -44,6 +44,11 @@ tester.run("prefer-plus-quantifier", rule as any, {
},
],
},
{
code: "/(a){1,}/v",
output: "/(a)+/v",
errors: ["Unexpected quantifier '{1,}'. Use '+' instead."],
},
{
code: "/(a){1,}?/",
output: "/(a)+?/",
Expand Down
Loading