Skip to content

Commit 227345b

Browse files
Added suggestions for no-octal (#131)
* Added suggestions for `no-octal` * Add test cases for suggestions (#134) Co-authored-by: Yosuke Ota <[email protected]>
1 parent 5d07612 commit 227345b

File tree

2 files changed

+100
-6
lines changed

2 files changed

+100
-6
lines changed

lib/rules/no-octal.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import type { Expression } from "estree"
22
import type { RegExpVisitor } from "regexpp/visitor"
3-
import { createRule, defineRegexpVisitor, getRegexpLocation } from "../utils"
3+
import {
4+
createRule,
5+
defineRegexpVisitor,
6+
fixReplaceNode,
7+
getRegexpLocation,
8+
} from "../utils"
49

510
export default createRule("no-octal", {
611
meta: {
@@ -11,6 +16,8 @@ export default createRule("no-octal", {
1116
schema: [],
1217
messages: {
1318
unexpected: "Unexpected octal escape sequence '{{expr}}'.",
19+
replaceHex:
20+
"Replace the octal escape sequence with a hexadecimal escape sequence.",
1421
},
1522
type: "suggestion", // "problem",
1623
},
@@ -51,6 +58,21 @@ export default createRule("no-octal", {
5158
data: {
5259
expr: cNode.raw,
5360
},
61+
suggest: [
62+
{
63+
messageId: "replaceHex",
64+
fix: fixReplaceNode(
65+
sourceCode,
66+
node,
67+
cNode,
68+
() => {
69+
return `\\x${cNode.value
70+
.toString(16)
71+
.padStart(2, "0")}`
72+
},
73+
),
74+
},
75+
],
5476
})
5577
}
5678
},

tests/lib/rules/no-octal.ts

Lines changed: 77 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ tester.run("no-octal", rule as any, {
1818
message: "Unexpected octal escape sequence '\\07'.",
1919
column: 2,
2020
endColumn: 5,
21+
suggestions: [
22+
{
23+
desc:
24+
"Replace the octal escape sequence with a hexadecimal escape sequence.",
25+
output: String.raw`/\x07/`,
26+
},
27+
],
2128
},
2229
],
2330
},
@@ -28,12 +35,30 @@ tester.run("no-octal", rule as any, {
2835
message: "Unexpected octal escape sequence '\\077'.",
2936
column: 2,
3037
endColumn: 6,
38+
suggestions: [
39+
{
40+
desc:
41+
"Replace the octal escape sequence with a hexadecimal escape sequence.",
42+
output: String.raw`/\x3f/`,
43+
},
44+
],
3145
},
3246
],
3347
},
3448
{
3549
code: "/[\\077]/",
36-
errors: [{ message: "Unexpected octal escape sequence '\\077'." }],
50+
errors: [
51+
{
52+
message: "Unexpected octal escape sequence '\\077'.",
53+
suggestions: [
54+
{
55+
desc:
56+
"Replace the octal escape sequence with a hexadecimal escape sequence.",
57+
output: String.raw`/[\x3f]/`,
58+
},
59+
],
60+
},
61+
],
3762
},
3863
{
3964
code: "/\\0777/",
@@ -42,23 +67,70 @@ tester.run("no-octal", rule as any, {
4267
message: "Unexpected octal escape sequence '\\077'.",
4368
column: 2,
4469
endColumn: 6,
70+
suggestions: [
71+
{
72+
desc:
73+
"Replace the octal escape sequence with a hexadecimal escape sequence.",
74+
output: String.raw`/\x3f7/`,
75+
},
76+
],
4577
},
4678
],
4779
},
4880
{
4981
code: "/\\7/",
50-
errors: [{ message: "Unexpected octal escape sequence '\\7'." }],
82+
errors: [
83+
{
84+
message: "Unexpected octal escape sequence '\\7'.",
85+
suggestions: [
86+
{
87+
desc:
88+
"Replace the octal escape sequence with a hexadecimal escape sequence.",
89+
output: String.raw`/\x07/`,
90+
},
91+
],
92+
},
93+
],
5194
},
5295
{
5396
code: "/\\1\\2/",
5497
errors: [
55-
{ message: "Unexpected octal escape sequence '\\1'." },
56-
{ message: "Unexpected octal escape sequence '\\2'." },
98+
{
99+
message: "Unexpected octal escape sequence '\\1'.",
100+
suggestions: [
101+
{
102+
desc:
103+
"Replace the octal escape sequence with a hexadecimal escape sequence.",
104+
output: String.raw`/\x01\2/`,
105+
},
106+
],
107+
},
108+
{
109+
message: "Unexpected octal escape sequence '\\2'.",
110+
suggestions: [
111+
{
112+
desc:
113+
"Replace the octal escape sequence with a hexadecimal escape sequence.",
114+
output: String.raw`/\1\x02/`,
115+
},
116+
],
117+
},
57118
],
58119
},
59120
{
60121
code: "/()\\1\\2/",
61-
errors: [{ message: "Unexpected octal escape sequence '\\2'." }],
122+
errors: [
123+
{
124+
message: "Unexpected octal escape sequence '\\2'.",
125+
suggestions: [
126+
{
127+
desc:
128+
"Replace the octal escape sequence with a hexadecimal escape sequence.",
129+
output: String.raw`/()\1\x02/`,
130+
},
131+
],
132+
},
133+
],
62134
},
63135
],
64136
})

0 commit comments

Comments
 (0)