Skip to content

Commit

Permalink
[Fix] style-prop-object: do not warn with explicit null or `undef…
Browse files Browse the repository at this point in the history
…ined` var style props.

Per jsx-eslint#812 (comment)
  • Loading branch information
ljharb committed Jan 20, 2017
1 parent fcacb51 commit 8121f58
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 6 deletions.
16 changes: 10 additions & 6 deletions lib/rules/style-prop-object.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@ module.exports = {
},

create: function(context) {
/**
* @param {object} node An Identifier node
*/
function isNonNullaryLiteral(expression) {
return expression.type === 'Literal' && expression.value !== null;
}

/**
* @param {object} node A Identifier node
*/
Expand All @@ -34,7 +41,7 @@ module.exports = {
return;
}

if (variable.defs[0].node.init.type === 'Literal') {
if (isNonNullaryLiteral(variable.defs[0].node.init)) {
context.report(node, 'Style prop value must be an object');
}
}
Expand All @@ -54,7 +61,7 @@ module.exports = {
if (style) {
if (style.value.type === 'Identifier') {
checkIdentifiers(style.value);
} else if (style.value.type === 'Literal' && style.value.value !== null) {
} else if (isNonNullaryLiteral(style.value)) {
context.report(style.value, 'Style prop value must be an object');
}
}
Expand All @@ -67,10 +74,7 @@ module.exports = {
return;
}

if (
node.value.type !== 'JSXExpressionContainer'
|| (node.value.expression.type === 'Literal' && node.value.expression.value !== null)
) {
if (node.value.type !== 'JSXExpressionContainer' || isNonNullaryLiteral(node.value.expression)) {
context.report(node, 'Style prop value must be an object');
} else if (node.value.expression.type === 'Identifier') {
checkIdentifiers(node.value.expression);
Expand Down
14 changes: 14 additions & 0 deletions tests/lib/rules/style-prop-object.js
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,20 @@ ruleTester.run('style-prop-object', rule, {
].join('\n'),
parserOptions: parserOptions
},
{
code: [
'let style = null;',
'<div style={style}></div>'
].join('\n'),
parserOptions: parserOptions
},
{
code: [
'let style = undefined;',
'<div style={style}></div>'
].join('\n'),
parserOptions: parserOptions
},
{
code: '<div style={undefined}></div>',
parserOptions: parserOptions
Expand Down

0 comments on commit 8121f58

Please sign in to comment.