Skip to content

Commit 9e13ae2

Browse files
committed
Fix no-danger-with-children to ignore line breaks (fixes #1262)
1 parent 31e55d2 commit 9e13ae2

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

lib/rules/no-danger-with-children.js

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,24 @@ module.exports = {
6464
});
6565
}
6666

67+
/**
68+
* Checks to see if a node is a line break
69+
* @param {ASTNode} node The AST node being checked
70+
* @returns {Boolean} True if node is a line break, false if not
71+
*/
72+
function isLineBreak(node) {
73+
const isLiteral = node.type === 'Literal';
74+
const isMultiline = node.loc.start.line !== node.loc.end.line;
75+
const isWhiteSpaces = /^\s*$/.test(node.value);
76+
77+
return isLiteral && isMultiline && isWhiteSpaces;
78+
}
79+
6780
return {
6881
JSXElement: function (node) {
6982
let hasChildren = false;
7083

71-
if (node.children.length) {
84+
if (node.children.length && !isLineBreak(node.children[0])) {
7285
hasChildren = true;
7386
} else if (findJsxProp(node, 'children')) {
7487
hasChildren = true;

tests/lib/rules/no-danger-with-children.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,12 @@ ruleTester.run('no-danger-with-children', rule, {
6868
{
6969
code: '<Hello dangerouslySetInnerHTML={{ __html: "HTML" }} />'
7070
},
71+
{
72+
code: `
73+
<Hello dangerouslySetInnerHTML={{ __html: "HTML" }}>
74+
</Hello>
75+
`
76+
},
7177
{
7278
code: 'React.createElement("div", { dangerouslySetInnerHTML: { __html: "HTML" } });'
7379
},
@@ -120,6 +126,10 @@ ruleTester.run('no-danger-with-children', rule, {
120126
code: '<Hello dangerouslySetInnerHTML={{ __html: "HTML" }} children="Children" />',
121127
errors: [{message: 'Only set one of `children` or `props.dangerouslySetInnerHTML`'}]
122128
},
129+
{
130+
code: '<Hello dangerouslySetInnerHTML={{ __html: "HTML" }}> </Hello>',
131+
errors: [{message: 'Only set one of `children` or `props.dangerouslySetInnerHTML`'}]
132+
},
123133
{
124134
code: [
125135
'React.createElement(',

0 commit comments

Comments
 (0)