diff --git a/rules/no-array-callback-reference.js b/rules/no-array-callback-reference.js index bdfa35c097..a2d1b3f7fa 100644 --- a/rules/no-array-callback-reference.js +++ b/rules/no-array-callback-reference.js @@ -15,27 +15,63 @@ const messages = { }; const iteratorMethods = [ - ['every'], + [ + 'every', + { + ignore: [ + 'Boolean', + ], + }, + ], [ 'filter', { extraSelector: '[callee.object.name!="Vue"]', + ignore: [ + 'Boolean', + ], + }, + ], + [ + 'find', + { + ignore: [ + 'Boolean', + ], + }, + ], + [ + 'findIndex', + { + ignore: [ + 'Boolean', + ], + }, + ], + [ + 'flatMap', + { + ignore: [ + 'Boolean', + ], }, ], - ['find'], - ['findIndex'], - ['flatMap'], [ 'forEach', { returnsUndefined: true, }, ], [ - 'map', { + 'map', + { extraSelector: '[callee.object.name!="types"]', + ignore: [ + 'Boolean', + ], }, ], [ - 'reduce', { + 'reduce', + { parameters: [ 'accumulator', 'element', @@ -43,11 +79,11 @@ const iteratorMethods = [ 'array', ], minParameters: 2, - ignore: [], }, ], [ - 'reduceRight', { + 'reduceRight', + { parameters: [ 'accumulator', 'element', @@ -55,14 +91,20 @@ const iteratorMethods = [ 'array', ], minParameters: 2, - ignore: [], }, ], - ['some'], + [ + 'some', + { + ignore: [ + 'Boolean', + ], + }, + ], ].map(([method, options]) => { options = { parameters: ['element', 'index', 'array'], - ignore: ['Boolean'], + ignore: [], minParameters: 1, extraSelector: '', returnsUndefined: false, diff --git a/test/no-array-callback-reference.mjs b/test/no-array-callback-reference.mjs index 274848c5de..1d1f2a2241 100644 --- a/test/no-array-callback-reference.mjs +++ b/test/no-array-callback-reference.mjs @@ -57,7 +57,7 @@ test({ ...reduceLikeMethods.map(method => `this.${method}(fn)`), // `Boolean` - ...simpleMethods.map(method => `foo.${method}(Boolean)`), + 'foo.map(Boolean)', // Not `CallExpression` 'new foo.map(fn);', @@ -207,7 +207,7 @@ test({ }), ), - // `Boolean` is not ignored on `reduce` and `reduceRight` + // `Boolean` is only ignored on reasonable places ...reduceLikeMethods.map( method => invalidTestCase({ code: `foo.${method}(Boolean, initialValue)`, @@ -220,6 +220,16 @@ test({ ], }), ), + invalidTestCase({ + code: 'foo.forEach(Boolean)', + method: 'forEach', + name: 'Boolean', + suggestions: [ + 'foo.forEach((element) => { Boolean(element); })', + 'foo.forEach((element, index) => { Boolean(element, index); })', + 'foo.forEach((element, index, array) => { Boolean(element, index, array); })', + ], + }), // Not `Identifier` ...simpleMethodsExceptForEach.map(