Skip to content

Commit e93ac75

Browse files
authored
✨ add support for suggestions API to "no-unused-disable" rule (#45)
1 parent 9074334 commit e93ac75

File tree

2 files changed

+144
-1
lines changed

2 files changed

+144
-1
lines changed

lib/utils/patch.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ function createNoUnusedDisableError(ruleId, severity, message, comment) {
8686
clone.message = targetRuleId
8787
? `'${targetRuleId}' rule is disabled but never reported.`
8888
: "ESLint rules are disabled but never reported."
89+
clone.suggestions = []
8990

9091
if (comment != null) {
9192
if (targetRuleId) {
@@ -98,6 +99,21 @@ function createNoUnusedDisableError(ruleId, severity, message, comment) {
9899
clone.endLine = comment.loc.end.line
99100
clone.endColumn = comment.loc.end.column + 1
100101
}
102+
// Remove the whole node if it is the only rule, otherwise
103+
// don't try to fix because it is quite complicated.
104+
if (!comment.value.includes(",") && !comment.value.includes("--")) {
105+
// We can't use the typical `fixer` helper because we are injecting
106+
// this message after the fixes are resolved.
107+
clone.suggestions = [
108+
{
109+
desc: "Remove `eslint-disable` comment.",
110+
fix: {
111+
range: comment.range,
112+
text: comment.value.includes("\n") ? "\n" : "",
113+
},
114+
},
115+
]
116+
}
101117
}
102118

103119
return clone

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

Lines changed: 128 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,15 @@ var a = b //eslint-disable-line`,
155155
column: 11,
156156
endLine: 2,
157157
endColumn: 32,
158+
suggestions: [
159+
{
160+
desc: "Remove `eslint-disable` comment.",
161+
fix: {
162+
range: [34, 55],
163+
text: "",
164+
},
165+
},
166+
],
158167
},
159168
],
160169
},
@@ -169,6 +178,15 @@ var a = b //eslint-disable-line no-undef`,
169178
column: 33,
170179
endLine: 2,
171180
endColumn: 41,
181+
suggestions: [
182+
{
183+
desc: "Remove `eslint-disable` comment.",
184+
fix: {
185+
range: [34, 64],
186+
text: "",
187+
},
188+
},
189+
],
172190
},
173191
],
174192
},
@@ -183,6 +201,7 @@ var a = b //eslint-disable-line no-undef,no-unused-vars`,
183201
column: 33,
184202
endLine: 2,
185203
endColumn: 41,
204+
suggestions: [],
186205
},
187206
{
188207
message:
@@ -191,6 +210,7 @@ var a = b //eslint-disable-line no-undef,no-unused-vars`,
191210
column: 42,
192211
endLine: 2,
193212
endColumn: 56,
213+
suggestions: [],
194214
},
195215
],
196216
},
@@ -206,6 +226,15 @@ var a = b`,
206226
column: 1,
207227
endLine: 2,
208228
endColumn: 27,
229+
suggestions: [
230+
{
231+
desc: "Remove `eslint-disable` comment.",
232+
fix: {
233+
range: [24, 50],
234+
text: "",
235+
},
236+
},
237+
],
209238
},
210239
],
211240
},
@@ -221,6 +250,15 @@ var a = b`,
221250
column: 28,
222251
endLine: 2,
223252
endColumn: 36,
253+
suggestions: [
254+
{
255+
desc: "Remove `eslint-disable` comment.",
256+
fix: {
257+
range: [24, 59],
258+
text: "",
259+
},
260+
},
261+
],
224262
},
225263
],
226264
},
@@ -236,6 +274,7 @@ var a = b`,
236274
column: 28,
237275
endLine: 2,
238276
endColumn: 36,
277+
suggestions: [],
239278
},
240279
{
241280
message:
@@ -244,6 +283,7 @@ var a = b`,
244283
column: 37,
245284
endLine: 2,
246285
endColumn: 51,
286+
suggestions: [],
247287
},
248288
],
249289
},
@@ -259,6 +299,15 @@ var a = b`,
259299
column: 1,
260300
endLine: 2,
261301
endColumn: 19,
302+
suggestions: [
303+
{
304+
desc: "Remove `eslint-disable` comment.",
305+
fix: {
306+
range: [24, 42],
307+
text: "",
308+
},
309+
},
310+
],
262311
},
263312
],
264313
},
@@ -274,6 +323,15 @@ var a = b`,
274323
column: 18,
275324
endLine: 2,
276325
endColumn: 26,
326+
suggestions: [
327+
{
328+
desc: "Remove `eslint-disable` comment.",
329+
fix: {
330+
range: [24, 51],
331+
text: "",
332+
},
333+
},
334+
],
277335
},
278336
],
279337
},
@@ -289,6 +347,7 @@ var a = b`,
289347
column: 18,
290348
endLine: 2,
291349
endColumn: 26,
350+
suggestions: [],
292351
},
293352
{
294353
message:
@@ -297,6 +356,7 @@ var a = b`,
297356
column: 27,
298357
endLine: 2,
299358
endColumn: 41,
359+
suggestions: [],
300360
},
301361
],
302362
},
@@ -313,6 +373,15 @@ var a = b
313373
column: 1,
314374
endLine: 2,
315375
endColumn: 19,
376+
suggestions: [
377+
{
378+
desc: "Remove `eslint-disable` comment.",
379+
fix: {
380+
range: [24, 42],
381+
text: "",
382+
},
383+
},
384+
],
316385
},
317386
],
318387
},
@@ -329,6 +398,15 @@ var a = b
329398
column: 18,
330399
endLine: 2,
331400
endColumn: 26,
401+
suggestions: [
402+
{
403+
desc: "Remove `eslint-disable` comment.",
404+
fix: {
405+
range: [24, 51],
406+
text: "",
407+
},
408+
},
409+
],
332410
},
333411
],
334412
},
@@ -345,6 +423,7 @@ var a = b
345423
column: 18,
346424
endLine: 2,
347425
endColumn: 26,
426+
suggestions: [],
348427
},
349428
{
350429
message:
@@ -353,6 +432,7 @@ var a = b
353432
column: 27,
354433
endLine: 2,
355434
endColumn: 41,
435+
suggestions: [],
356436
},
357437
],
358438
},
@@ -369,6 +449,15 @@ var a = b//eslint-disable-line no-undef`,
369449
column: 1,
370450
endLine: 2,
371451
endColumn: 19,
452+
suggestions: [
453+
{
454+
desc: "Remove `eslint-disable` comment.",
455+
fix: {
456+
range: [26, 44],
457+
text: "",
458+
},
459+
},
460+
],
372461
},
373462
],
374463
},
@@ -385,6 +474,15 @@ var a = b//eslint-disable-line no-undef`,
385474
column: 18,
386475
endLine: 2,
387476
endColumn: 26,
477+
suggestions: [
478+
{
479+
desc: "Remove `eslint-disable` comment.",
480+
fix: {
481+
range: [26, 53],
482+
text: "",
483+
},
484+
},
485+
],
388486
},
389487
],
390488
},
@@ -401,6 +499,7 @@ var a = b//eslint-disable-line no-undef`,
401499
column: 18,
402500
endLine: 2,
403501
endColumn: 26,
502+
suggestions: [],
404503
},
405504
],
406505
},
@@ -421,6 +520,7 @@ var a = b
421520
column: 5,
422521
endLine: 5,
423522
endColumn: 11,
523+
suggestions: [],
424524
},
425525
],
426526
},
@@ -435,6 +535,15 @@ var a = b
435535
column: 47,
436536
endLine: 1,
437537
endColumn: 57,
538+
suggestions: [
539+
{
540+
desc: "Remove `eslint-disable` comment.",
541+
fix: {
542+
range: [29, 58],
543+
text: "",
544+
},
545+
},
546+
],
438547
},
439548
],
440549
},
@@ -453,6 +562,15 @@ var a = b //eslint-disable-line`,
453562
column: 11,
454563
endLine: 2,
455564
endColumn: 32,
565+
suggestions: [
566+
{
567+
desc: "Remove `eslint-disable` comment.",
568+
fix: {
569+
range: [34, 55],
570+
text: "",
571+
},
572+
},
573+
],
456574
},
457575
],
458576
reportUnusedDisableDirectives: true,
@@ -472,6 +590,15 @@ var a = b //eslint-disable-line no-undef`,
472590
column: 33,
473591
endLine: 2,
474592
endColumn: 41,
593+
suggestions: [
594+
{
595+
desc: "Remove `eslint-disable` comment.",
596+
fix: {
597+
range: [34, 64],
598+
text: "",
599+
},
600+
},
601+
],
475602
},
476603
],
477604
reportUnusedDisableDirectives: true,
@@ -497,7 +624,7 @@ var a = b //eslint-disable-line no-undef`,
497624
const expected = errors[i]
498625

499626
for (const key of Object.keys(expected)) {
500-
assert.strictEqual(
627+
assert.deepStrictEqual(
501628
actual[key],
502629
expected[key],
503630
`'${key}' is not expected.`

0 commit comments

Comments
 (0)