Skip to content

Commit 1d0f6ae

Browse files
committed
New: no-unlimited-disable rule
1 parent 7c291b3 commit 1d0f6ae

File tree

3 files changed

+142
-0
lines changed

3 files changed

+142
-0
lines changed

docs/rules/no-unlimited-disable.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# disallows `eslint-disable` comments without rule names (eslint-comments/no-unlimited-disable)
2+
3+
Disable-comments disable all rules by default. This may cause to overlook some ESLint warnings unintentionally.
4+
So you should specify the rules to disable accurately.
5+
6+
## Rule Details
7+
8+
Examples of **incorrect** code for this rule:
9+
10+
```js
11+
/*eslint eslint-comments/no-unlimited-disable: error */
12+
13+
var foo; //eslint-disable-line
14+
```
15+
16+
Examples of **correct** code for this rule:
17+
18+
```js
19+
/*eslint eslint-comments/no-unlimited-disable: error */
20+
21+
var foo; //eslint-disable-line no-unused-vars
22+
```

lib/rules/no-unlimited-disable.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/**
2+
* @author Toru Nagashima
3+
* @copyright 2016 Toru Nagashima. All rights reserved.
4+
* See LICENSE file in root directory for full license.
5+
*/
6+
"use strict"
7+
8+
//------------------------------------------------------------------------------
9+
// Requirements
10+
//------------------------------------------------------------------------------
11+
12+
const utils = require("../utils")
13+
14+
//------------------------------------------------------------------------------
15+
// Helpers
16+
//------------------------------------------------------------------------------
17+
18+
const BLOCK_COMMENT_DIRECTIVE = /^\s*(eslint-disable)\s*(\S)?/
19+
const LINE_COMMENT_DIRECTIVE = /^\s*(eslint-disable(?:-next)?-line)\s*(\S)?/
20+
const MESSAGE = "Unexpected unlimited '{{kind}}' comment. Specify some rule names to disable."
21+
22+
//------------------------------------------------------------------------------
23+
// Rule Definition
24+
//------------------------------------------------------------------------------
25+
26+
module.exports = {
27+
meta: {
28+
docs: {
29+
description: "disallows `eslint-disable` comments without rule names",
30+
category: "Best Practices",
31+
},
32+
fixable: false,
33+
schema: [],
34+
},
35+
36+
create(context) {
37+
return {
38+
BlockComment(token) {
39+
const m = BLOCK_COMMENT_DIRECTIVE.exec(token.value)
40+
if (m && !m[2]) {
41+
context.report({
42+
loc: utils.toForceLocation(token.loc),
43+
message: MESSAGE,
44+
data: {kind: m[1]},
45+
})
46+
}
47+
},
48+
49+
LineComment(token) {
50+
const m = LINE_COMMENT_DIRECTIVE.exec(token.value)
51+
if (m && !m[2]) {
52+
context.report({
53+
loc: utils.toForceLocation(token.loc),
54+
message: MESSAGE,
55+
data: {kind: m[1]},
56+
})
57+
}
58+
},
59+
}
60+
},
61+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/**
2+
* @author Toru Nagashima
3+
* @copyright 2016 Toru Nagashima. All rights reserved.
4+
* See LICENSE file in root directory for full license.
5+
*/
6+
"use strict"
7+
8+
//------------------------------------------------------------------------------
9+
// Requirements
10+
//------------------------------------------------------------------------------
11+
12+
const RuleTester = require("eslint").RuleTester
13+
const rule = require("../../../lib/rules/no-unlimited-disable")
14+
15+
//------------------------------------------------------------------------------
16+
// Tests
17+
//------------------------------------------------------------------------------
18+
19+
const tester = new RuleTester()
20+
21+
tester.run("no-unlimited-disable", rule, {
22+
valid: [
23+
"/*eslint-enable*/",
24+
"/*eslint-disable foo*/",
25+
"//eslint-disable-line foo",
26+
"//eslint-disable-next-line foo",
27+
"var foo;\n//eslint-disable-line foo",
28+
],
29+
invalid: [
30+
{
31+
code: "/*eslint-disable */",
32+
errors: ["Unexpected unlimited 'eslint-disable' comment. Specify some rule names to disable."],
33+
},
34+
{
35+
code: "/* eslint-disable */",
36+
errors: ["Unexpected unlimited 'eslint-disable' comment. Specify some rule names to disable."],
37+
},
38+
{
39+
code: "//eslint-disable-line",
40+
errors: ["Unexpected unlimited 'eslint-disable-line' comment. Specify some rule names to disable."],
41+
},
42+
{
43+
code: "// eslint-disable-line ",
44+
errors: ["Unexpected unlimited 'eslint-disable-line' comment. Specify some rule names to disable."],
45+
},
46+
{
47+
code: "//eslint-disable-next-line",
48+
errors: ["Unexpected unlimited 'eslint-disable-next-line' comment. Specify some rule names to disable."],
49+
},
50+
{
51+
code: "// eslint-disable-next-line ",
52+
errors: ["Unexpected unlimited 'eslint-disable-next-line' comment. Specify some rule names to disable."],
53+
},
54+
{
55+
code: "var foo;\n//eslint-disable-line",
56+
errors: ["Unexpected unlimited 'eslint-disable-line' comment. Specify some rule names to disable."],
57+
},
58+
],
59+
})

0 commit comments

Comments
 (0)