Skip to content

Commit 0d1aaf8

Browse files
committed
Handle fragments in jsx-key
1 parent 7d449a9 commit 0d1aaf8

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

lib/rules/jsx-key.js

+15-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ module.exports = {
3131
node,
3232
message: 'Missing "key" prop for element in iterator'
3333
});
34+
} else if (node.type === 'JSXFragment') {
35+
context.report({
36+
node,
37+
message: 'Missing "key" prop for element in iterator. Shorthand fragment syntax does support providing keys'
38+
});
3439
}
3540
}
3641

@@ -52,6 +57,15 @@ module.exports = {
5257
}
5358
},
5459

60+
JSXFragment(node) {
61+
if (node.parent.type === 'ArrayExpression') {
62+
context.report({
63+
node,
64+
message: 'Missing "key" prop for element in array. Shorthand fragment syntax does support providing keys'
65+
});
66+
}
67+
},
68+
5569
// Array.prototype.map
5670
CallExpression(node) {
5771
if (node.callee && node.callee.type !== 'MemberExpression') {
@@ -66,7 +80,7 @@ module.exports = {
6680
const isFn = fn && fn.type === 'FunctionExpression';
6781
const isArrFn = fn && fn.type === 'ArrowFunctionExpression';
6882

69-
if (isArrFn && fn.body.type === 'JSXElement') {
83+
if (isArrFn && (fn.body.type === 'JSXElement' || fn.body.type === 'JSXFragment')) {
7084
checkIteratorElement(fn.body);
7185
}
7286

tests/lib/rules/jsx-key.js

+9-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ ruleTester.run('jsx-key', rule, {
3737
{code: '[1, 2, 3].foo(x => <App />);'},
3838
{code: 'var App = () => <div />;'},
3939
{code: '[1, 2, 3].map(function(x) { return; });'},
40-
{code: 'foo(() => <div />);'}
40+
{code: 'foo(() => <div />);'},
41+
{code: 'foo(() => <></>);'},
42+
{code: '<></>;'}
4143
],
4244
invalid: [{
4345
code: '[<App />];',
@@ -57,5 +59,11 @@ ruleTester.run('jsx-key', rule, {
5759
}, {
5860
code: '[1, 2 ,3].map(x => { return <App /> });',
5961
errors: [{message: 'Missing "key" prop for element in iterator'}]
62+
}, {
63+
code: '[1, 2, 3].map(x => <>{x}</>);',
64+
errors: [{message: 'Missing "key" prop for element in iterator. Shorthand fragment syntax does support providing keys'}]
65+
}, {
66+
code: '[<></>];',
67+
errors: [{message: 'Missing "key" prop for element in array. Shorthand fragment syntax does support providing keys'}]
6068
}]
6169
});

0 commit comments

Comments
 (0)