Skip to content

Commit eb1031e

Browse files
committed
Fix false positives when using <svg> in vue/valid-v-slot and vue/valid-v-model rule
1 parent f1c6789 commit eb1031e

File tree

5 files changed

+23
-28
lines changed

5 files changed

+23
-28
lines changed

lib/rules/require-toggle-inside-transition.js

-23
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,6 @@
1010

1111
const utils = require('../utils')
1212

13-
// ------------------------------------------------------------------------------
14-
// Helpers
15-
// ------------------------------------------------------------------------------
16-
17-
/**
18-
* Check whether the given node is an well-known element or not.
19-
* @param {VElement} node The element node to check.
20-
* @returns {boolean} `true` if the name is an well-known element name.
21-
*/
22-
function isWellKnownElement(node) {
23-
if (
24-
(!utils.isHtmlElementNode(node) && !utils.isSvgElementNode(node)) ||
25-
utils.isHtmlWellKnownElementName(node.rawName) ||
26-
utils.isSvgWellKnownElementName(node.rawName)
27-
) {
28-
return true
29-
}
30-
return false
31-
}
32-
3313
// ------------------------------------------------------------------------------
3414
// Rule Definition
3515
// ------------------------------------------------------------------------------
@@ -61,9 +41,6 @@ module.exports = {
6141
if (utils.isCustomComponent(element)) {
6242
return
6343
}
64-
if (!isWellKnownElement(element)) {
65-
return
66-
}
6744
if (
6845
!utils.hasDirective(element, 'if') &&
6946
!utils.hasDirective(element, 'show')

lib/rules/valid-v-bind-sync.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,7 @@ const utils = require('../utils')
2020
* @returns {boolean} `true` if the node is valid.
2121
*/
2222
function isValidElement(node) {
23-
if (
24-
(!utils.isHtmlElementNode(node) && !utils.isSvgElementNode(node)) ||
25-
utils.isHtmlWellKnownElementName(node.rawName) ||
26-
utils.isSvgWellKnownElementName(node.rawName)
27-
) {
23+
if (!utils.isCustomComponent(node)) {
2824
// non Vue-component
2925
return false
3026
}

lib/utils/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,8 @@ module.exports = {
590590
return (
591591
(this.isHtmlElementNode(node) &&
592592
!this.isHtmlWellKnownElementName(node.rawName)) ||
593+
(this.isSvgElementNode(node) &&
594+
!this.isSvgWellKnownElementName(node.rawName)) ||
593595
this.hasAttribute(node, 'is') ||
594596
this.hasDirective(node, 'bind', 'is') ||
595597
this.hasDirective(node, 'is')

tests/lib/rules/valid-v-model.js

+9
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,15 @@ tester.run('valid-v-model', rule, {
151151
code:
152152
'<template><MyComponent v-model.modifier.modifierTwo="a"></MyComponent></template>'
153153
},
154+
// svg
155+
{
156+
code: `
157+
<template>
158+
<svg>
159+
<MyComponent v-model="slotProps"></MyComponent>
160+
</svg>
161+
</template>`
162+
},
154163
// parsing error
155164
{
156165
filename: 'parsing-error.vue',

tests/lib/rules/valid-v-slot.js

+11
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,17 @@ tester.run('valid-v-slot', rule, {
107107
`,
108108
options: [{ allowModifiers: true }]
109109
},
110+
// svg
111+
{
112+
code: `
113+
<template>
114+
<svg>
115+
<MyComponent v-slot="slotProps">
116+
<MyChildComponent :thing="slotProps.thing" />
117+
</MyComponent>
118+
</svg>
119+
</template>`
120+
},
110121
// parsing error
111122
{
112123
filename: 'parsing-error.vue',

0 commit comments

Comments
 (0)