diff --git a/packages/eslint-plugin/lib/rules/element-newline.js b/packages/eslint-plugin/lib/rules/element-newline.js index e01c3e19..5be800de 100644 --- a/packages/eslint-plugin/lib/rules/element-newline.js +++ b/packages/eslint-plugin/lib/rules/element-newline.js @@ -43,9 +43,7 @@ module.exports = { create(context) { const option = context.options[0] || { skip: [] }; const skipTags = option.skip; - - let isInSkipTags = false; - + let skipTagCount = 0; /** * @param {ChildType[]} siblings */ @@ -109,15 +107,14 @@ module.exports = { checkSiblings(node.body); }, Tag(node) { - if (isInSkipTags) { + if (skipTagCount > 0) { return; } - - checkSiblings(node.children); if (skipTags.includes(node.name)) { - isInSkipTags = true; + skipTagCount++; return; } + checkSiblings(node.children); checkChild(node, node.children); }, /** @@ -126,7 +123,7 @@ module.exports = { */ "Tag:exit"(node) { if (skipTags.includes(node.name)) { - isInSkipTags = false; + skipTagCount--; return; } }, diff --git a/packages/eslint-plugin/tests/rules/element-newline.test.js b/packages/eslint-plugin/tests/rules/element-newline.test.js index 326bb714..a724c98c 100644 --- a/packages/eslint-plugin/tests/rules/element-newline.test.js +++ b/packages/eslint-plugin/tests/rules/element-newline.test.js @@ -70,6 +70,26 @@ ruleTester.run("element-newline", rule, { }, ], }, + { + code: ` +
+
+
+`, + options: [ + { + skip: ["div"], + }, + ], + }, + { + code: `
`, + options: [ + { + skip: ["pre", "code"], + }, + ], + }, ], invalid: [ {