Skip to content

Commit 8121f58

Browse files
committed
[Fix] style-prop-object: do not warn with explicit null or undefined var style props.
Per #812 (comment)
1 parent fcacb51 commit 8121f58

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

lib/rules/style-prop-object.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ module.exports = {
2222
},
2323

2424
create: function(context) {
25+
/**
26+
* @param {object} node An Identifier node
27+
*/
28+
function isNonNullaryLiteral(expression) {
29+
return expression.type === 'Literal' && expression.value !== null;
30+
}
31+
2532
/**
2633
* @param {object} node A Identifier node
2734
*/
@@ -34,7 +41,7 @@ module.exports = {
3441
return;
3542
}
3643

37-
if (variable.defs[0].node.init.type === 'Literal') {
44+
if (isNonNullaryLiteral(variable.defs[0].node.init)) {
3845
context.report(node, 'Style prop value must be an object');
3946
}
4047
}
@@ -54,7 +61,7 @@ module.exports = {
5461
if (style) {
5562
if (style.value.type === 'Identifier') {
5663
checkIdentifiers(style.value);
57-
} else if (style.value.type === 'Literal' && style.value.value !== null) {
64+
} else if (isNonNullaryLiteral(style.value)) {
5865
context.report(style.value, 'Style prop value must be an object');
5966
}
6067
}
@@ -67,10 +74,7 @@ module.exports = {
6774
return;
6875
}
6976

70-
if (
71-
node.value.type !== 'JSXExpressionContainer'
72-
|| (node.value.expression.type === 'Literal' && node.value.expression.value !== null)
73-
) {
77+
if (node.value.type !== 'JSXExpressionContainer' || isNonNullaryLiteral(node.value.expression)) {
7478
context.report(node, 'Style prop value must be an object');
7579
} else if (node.value.expression.type === 'Identifier') {
7680
checkIdentifiers(node.value.expression);

tests/lib/rules/style-prop-object.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,20 @@ ruleTester.run('style-prop-object', rule, {
122122
].join('\n'),
123123
parserOptions: parserOptions
124124
},
125+
{
126+
code: [
127+
'let style = null;',
128+
'<div style={style}></div>'
129+
].join('\n'),
130+
parserOptions: parserOptions
131+
},
132+
{
133+
code: [
134+
'let style = undefined;',
135+
'<div style={style}></div>'
136+
].join('\n'),
137+
parserOptions: parserOptions
138+
},
125139
{
126140
code: '<div style={undefined}></div>',
127141
parserOptions: parserOptions

0 commit comments

Comments
 (0)