Skip to content

Commit 50698bc

Browse files
Changed no-octal to report more octal escapes (#108)
1 parent 471a9ae commit 50698bc

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

lib/rules/no-octal.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,26 @@ export default createRule("no-octal", {
2424
function createVisitor(node: Expression): RegExpVisitor.Handlers {
2525
return {
2626
onCharacterEnter(cNode) {
27-
if (cNode.raw.startsWith("\\0") && cNode.raw !== "\\0") {
27+
if (cNode.raw === "\\0") {
28+
// \0 looks like a octal escape but is allowed
29+
return
30+
}
31+
if (!/^\\[0-7]+$/.test(cNode.raw)) {
32+
// not an octal escape
33+
return
34+
}
35+
36+
const report =
37+
// always report octal escapes that look like \0
38+
cNode.raw.startsWith("\\0") ||
39+
// don't report octal escapes inside character classes
40+
// (e.g. [\4-\6]).
41+
!(
42+
cNode.parent.type === "CharacterClass" ||
43+
cNode.parent.type === "CharacterClassRange"
44+
)
45+
46+
if (report) {
2847
context.report({
2948
node,
3049
loc: getRegexpLocation(sourceCode, node, cNode),

tests/lib/rules/no-octal.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const tester = new RuleTester({
99
})
1010

1111
tester.run("no-octal", rule as any, {
12-
valid: ["/\\0/", "/\\7/"],
12+
valid: ["/\\0/", "/[\\7]/", "/[\\1-\\4]/"],
1313
invalid: [
1414
{
1515
code: "/\\07/",
@@ -31,6 +31,10 @@ tester.run("no-octal", rule as any, {
3131
},
3232
],
3333
},
34+
{
35+
code: "/[\\077]/",
36+
errors: [{ message: 'Unexpected octal escape sequence "\\077".' }],
37+
},
3438
{
3539
code: "/\\0777/",
3640
errors: [
@@ -41,5 +45,20 @@ tester.run("no-octal", rule as any, {
4145
},
4246
],
4347
},
48+
{
49+
code: "/\\7/",
50+
errors: [{ message: 'Unexpected octal escape sequence "\\7".' }],
51+
},
52+
{
53+
code: "/\\1\\2/",
54+
errors: [
55+
{ message: 'Unexpected octal escape sequence "\\1".' },
56+
{ message: 'Unexpected octal escape sequence "\\2".' },
57+
],
58+
},
59+
{
60+
code: "/()\\1\\2/",
61+
errors: [{ message: 'Unexpected octal escape sequence "\\2".' }],
62+
},
4463
],
4564
})

0 commit comments

Comments
 (0)