Skip to content

Commit 4ca9160

Browse files
committed
Make no-unused-disable fixable
Summary: Add a fixer for no-unused-disable that just removes the entire comment node. This behavior is undesirable if you frequently disable multiple rules at a time, as it removes the entire comment even if only one was unused. Since disabling multiple rules is the exception, I still think this fixer has tremendous value. Test plan: - `npm run test` - run the rule on a handful of files in a local project, note that it finds many issues and successfully fixes them
1 parent c427c1c commit 4ca9160

File tree

4 files changed

+69
-2
lines changed

4 files changed

+69
-2
lines changed

docs/rules/no-unused-disable.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
# disallow unused `eslint-disable` comments (eslint-comments/no-unused-disable)
1+
# disallows unused `eslint-disable` comments (eslint-comments/no-unused-disable)
2+
3+
- ✒️ This rule is fixable. The fixer removes the comment. Note that it removes the entire comment, even if multiple rules were disabled, and only one was unused, which is likely undesirable.
24

35
Since refactoring or a bug fix of upstream, an `eslint-disable` directive-comment may become unnecessary.
46
In that case, you should remove the garbage as soon as possible since the garbage may cause to overlook ESLint warnings in future.

lib/rules/no-unused-disable.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ module.exports = {
1616
url:
1717
"https://mysticatea.github.io/eslint-plugin-eslint-comments/rules/no-unused-disable.html",
1818
},
19-
fixable: null,
19+
fixable: "code",
2020
schema: [],
2121
},
2222

lib/utils/patch.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,17 @@ function createNoUnusedDisableError(ruleId, severity, message, comment) {
9494
clone.column = loc.start.column + 1
9595
clone.endLine = loc.end.line
9696
clone.endColumn = loc.end.column + 1
97+
clone.fix = function fix(fixer) {
98+
return fixer.removeRange(loc)
99+
}
97100
} else {
98101
clone.endLine = comment.loc.end.line
99102
clone.endColumn = comment.loc.end.column + 1
103+
clone.fix = function fix(fixer) {
104+
return fixer.remove(comment)
105+
}
100106
}
107+
101108
}
102109

103110
return clone

tests/lib/rules/no-unused-disable.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,8 @@ function baz() {
147147
{
148148
code: `/*eslint no-undef:off*/
149149
var a = b //eslint-disable-line`,
150+
output: `/*eslint no-undef:off*/
151+
var a = b `,
150152
errors: [
151153
{
152154
message:
@@ -161,6 +163,8 @@ var a = b //eslint-disable-line`,
161163
{
162164
code: `/*eslint no-undef:off*/
163165
var a = b //eslint-disable-line no-undef`,
166+
output: `/*eslint no-undef:off*/
167+
var a = b `,
164168
errors: [
165169
{
166170
message:
@@ -175,6 +179,8 @@ var a = b //eslint-disable-line no-undef`,
175179
{
176180
code: `/*eslint no-undef:off, no-unused-vars:off*/
177181
var a = b //eslint-disable-line no-undef,no-unused-vars`,
182+
output: `/*eslint no-undef:off, no-unused-vars:off*/
183+
var a = b `,
178184
errors: [
179185
{
180186
message:
@@ -197,6 +203,9 @@ var a = b //eslint-disable-line no-undef,no-unused-vars`,
197203
{
198204
code: `/*eslint no-undef:off*/
199205
//eslint-disable-next-line
206+
var a = b`,
207+
output: `/*eslint no-undef:off*/
208+
200209
var a = b`,
201210
errors: [
202211
{
@@ -212,6 +221,9 @@ var a = b`,
212221
{
213222
code: `/*eslint no-undef:off*/
214223
//eslint-disable-next-line no-undef
224+
var a = b`,
225+
output: `/*eslint no-undef:off*/
226+
215227
var a = b`,
216228
errors: [
217229
{
@@ -227,6 +239,9 @@ var a = b`,
227239
{
228240
code: `/*eslint no-undef:off, no-unused-vars:off*/
229241
//eslint-disable-next-line no-undef,no-unused-vars
242+
var a = b`,
243+
output: `/*eslint no-undef:off, no-unused-vars:off*/
244+
230245
var a = b`,
231246
errors: [
232247
{
@@ -250,6 +265,9 @@ var a = b`,
250265
{
251266
code: `/*eslint no-undef:off*/
252267
/*eslint-disable*/
268+
var a = b`,
269+
output: `/*eslint no-undef:off*/
270+
253271
var a = b`,
254272
errors: [
255273
{
@@ -265,6 +283,9 @@ var a = b`,
265283
{
266284
code: `/*eslint no-undef:off*/
267285
/*eslint-disable no-undef*/
286+
var a = b`,
287+
output: `/*eslint no-undef:off*/
288+
268289
var a = b`,
269290
errors: [
270291
{
@@ -280,6 +301,9 @@ var a = b`,
280301
{
281302
code: `/*eslint no-undef:off, no-unused-vars:off*/
282303
/*eslint-disable no-undef,no-unused-vars*/
304+
var a = b`,
305+
output: `/*eslint no-undef:off, no-unused-vars:off*/
306+
283307
var a = b`,
284308
errors: [
285309
{
@@ -303,6 +327,10 @@ var a = b`,
303327
{
304328
code: `/*eslint no-undef:off*/
305329
/*eslint-disable*/
330+
var a = b
331+
/*eslint-enable*/`,
332+
output: `/*eslint no-undef:off*/
333+
306334
var a = b
307335
/*eslint-enable*/`,
308336
errors: [
@@ -319,6 +347,10 @@ var a = b
319347
{
320348
code: `/*eslint no-undef:off*/
321349
/*eslint-disable no-undef*/
350+
var a = b
351+
/*eslint-enable*/`,
352+
output: `/*eslint no-undef:off*/
353+
322354
var a = b
323355
/*eslint-enable*/`,
324356
errors: [
@@ -335,6 +367,10 @@ var a = b
335367
{
336368
code: `/*eslint no-undef:off, no-unused-vars:off*/
337369
/*eslint-disable no-undef,no-unused-vars*/
370+
var a = b
371+
/*eslint-enable*/`,
372+
output: `/*eslint no-undef:off, no-unused-vars:off*/
373+
338374
var a = b
339375
/*eslint-enable*/`,
340376
errors: [
@@ -359,6 +395,10 @@ var a = b
359395
{
360396
code: `/*eslint no-undef:error*/
361397
/*eslint-disable*/
398+
/*eslint-enable*/
399+
var a = b//eslint-disable-line no-undef`,
400+
output: `/*eslint no-undef:error*/
401+
362402
/*eslint-enable*/
363403
var a = b//eslint-disable-line no-undef`,
364404
errors: [
@@ -375,6 +415,10 @@ var a = b//eslint-disable-line no-undef`,
375415
{
376416
code: `/*eslint no-undef:error*/
377417
/*eslint-disable no-undef*/
418+
/*eslint-enable no-undef*/
419+
var a = b//eslint-disable-line no-undef`,
420+
output: `/*eslint no-undef:error*/
421+
378422
/*eslint-enable no-undef*/
379423
var a = b//eslint-disable-line no-undef`,
380424
errors: [
@@ -391,6 +435,10 @@ var a = b//eslint-disable-line no-undef`,
391435
{
392436
code: `/*eslint no-undef:error, no-unused-vars:error*/
393437
/*eslint-disable no-undef,no-unused-vars*/
438+
/*eslint-enable no-undef*/
439+
var a = b//eslint-disable-line no-undef`,
440+
output: `/*eslint no-undef:error, no-unused-vars:error*/
441+
394442
/*eslint-enable no-undef*/
395443
var a = b//eslint-disable-line no-undef`,
396444
errors: [
@@ -411,6 +459,10 @@ var a = b//eslint-disable-line no-undef`,
411459
no-unused-vars,
412460
xxxx
413461
*/
462+
var a = b
463+
/*eslint-enable*/`,
464+
output: `/*eslint no-undef:error, no-unused-vars:error*/
465+
414466
var a = b
415467
/*eslint-enable*/`,
416468
errors: [
@@ -426,6 +478,8 @@ var a = b
426478
{
427479
code:
428480
"/* eslint new-parens:error*/ /*eslint-disable new-parens*/",
481+
code:
482+
"/* eslint new-parens:error*/ ",
429483
errors: [
430484
{
431485
message:
@@ -440,6 +494,8 @@ var a = b
440494
{
441495
code: `/*eslint no-undef:off*/
442496
var a = b //eslint-disable-line`,
497+
output: `/*eslint no-undef:off*/
498+
var a = b `,
443499
errors: [
444500
{
445501
message:
@@ -459,6 +515,8 @@ var a = b //eslint-disable-line`,
459515
{
460516
code: `/*eslint no-undef:off*/
461517
var a = b //eslint-disable-line no-undef`,
518+
output: `/*eslint no-undef:off*/
519+
var a = b `,
462520
errors: [
463521
{
464522
message:

0 commit comments

Comments
 (0)