diff --git a/lib/rules/no-array-index-key.js b/lib/rules/no-array-index-key.js index ceb2a1676a..d75988a833 100644 --- a/lib/rules/no-array-index-key.js +++ b/lib/rules/no-array-index-key.js @@ -150,6 +150,40 @@ module.exports = { identifiers.filter(isArrayIndex).forEach(() => { context.report({node, message: ERROR_MESSAGE}); }); + + return; + } + + if (node.type === 'CallExpression' + && node.callee + && node.callee.type === 'MemberExpression' + && node.callee.object + && isArrayIndex(node.callee.object) + && node.callee.property + && node.callee.property.type === 'Identifier' + && node.callee.property.name === 'toString' + ) { + // key={bar.toString()} + context.report({ + node, + message: ERROR_MESSAGE + }); + return; + } + + if (node.type === 'CallExpression' + && node.callee + && node.callee.type === 'Identifier' + && node.callee.name === 'String' + && Array.isArray(node.arguments) + && node.arguments.length > 0 + && isArrayIndex(node.arguments[0]) + ) { + // key={String(bar)} + context.report({ + node: node.arguments[0], + message: ERROR_MESSAGE + }); } } diff --git a/tests/lib/rules/no-array-index-key.js b/tests/lib/rules/no-array-index-key.js index ec4370298c..7f8b691e41 100644 --- a/tests/lib/rules/no-array-index-key.js +++ b/tests/lib/rules/no-array-index-key.js @@ -75,6 +75,22 @@ ruleTester.run('no-array-index-key', rule, { code: 'foo.map((baz, i) => )' }, + { + code: 'foo.map((bar, i) => )' + }, + + { + code: 'foo.map((bar, i) => )' + }, + + { + code: 'foo.map((bar, i) => )' + }, + + { + code: 'foo.map((bar, i) => )' + }, + { code: 'foo.reduce((a, b) => a.concat(), [])' }, @@ -119,6 +135,16 @@ ruleTester.run('no-array-index-key', rule, { errors: [{message: 'Do not use Array index in keys'}] }, + { + code: 'foo.map((bar, i) => )', + errors: [{message: 'Do not use Array index in keys'}] + }, + + { + code: 'foo.map((bar, i) => )', + errors: [{message: 'Do not use Array index in keys'}] + }, + { code: 'foo.map((bar, anything) => )', errors: [{message: 'Do not use Array index in keys'}]