Skip to content

Commit 6cd4acc

Browse files
committed
fix(no-multiple-template-root): skip comments outside template
1 parent c36cae5 commit 6cd4acc

File tree

3 files changed

+17
-8
lines changed

3 files changed

+17
-8
lines changed

lib/rules/no-multiple-template-root.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,7 @@ const utils = require('../utils')
1414
*/
1515
function getReportComments(comments, elementRanges) {
1616
return comments.filter(
17-
(comment) =>
18-
!elementRanges.some(
19-
(range) => range[0] <= comment.range[0] && comment.range[1] <= range[1]
20-
)
17+
(comment) => !elementRanges.some((range) => utils.inRange(range, comment))
2118
)
2219
}
2320

@@ -65,7 +62,9 @@ module.exports = {
6562
return
6663
}
6764

68-
const comments = element.comments
65+
const comments = element.comments.filter((comment) =>
66+
utils.inRange(comment, element)
67+
)
6968
const elementRanges = element.children.map((child) => child.range)
7069
if (disallowComments && comments.length > 0) {
7170
for (const comment of getReportComments(comments, elementRanges)) {

lib/utils/index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1969,10 +1969,11 @@ module.exports = {
19691969
},
19701970
/**
19711971
* Checks whether the target node is within the given range.
1972-
* @param { [number, number] } range
1972+
* @param { [number, number] | ASTNode | Token } rangeOrNode
19731973
* @param {ASTNode | Token} target
19741974
*/
1975-
inRange(range, target) {
1975+
inRange(rangeOrNode, target) {
1976+
const range = Array.isArray(rangeOrNode) ? rangeOrNode : rangeOrNode.range
19761977
return range[0] <= target.range[0] && target.range[1] <= range[1]
19771978
},
19781979
/**

tests/lib/rules/no-multiple-template-root.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,15 @@ ruleTester.run('no-multiple-template-root', rule, {
122122
</template>
123123
`,
124124
options: [{ disallowComments: true }]
125+
},
126+
{
127+
code: `
128+
<!-- comment -->
129+
<template>
130+
<div>abc</div>
131+
</template>
132+
`,
133+
options: [{ disallowComments: true }]
125134
}
126135
],
127136
invalid: [
@@ -371,7 +380,7 @@ ruleTester.run('no-multiple-template-root', rule, {
371380
{
372381
code: `
373382
<template>
374-
<!-- When you have a comment in the root of your template in vue 3,
383+
<!-- When you have a comment in the root of your template in vue 3,
375384
using $el will point to the first text comment instead of the actual DOM element. -->
376385
<div>
377386
12333

0 commit comments

Comments
 (0)