Skip to content

Commit

Permalink
Fix false positives for function args in vue/valid-define-emits and…
Browse files Browse the repository at this point in the history
… `vue/valid-define-props` rules (#1652)
  • Loading branch information
ota-meshi committed Oct 6, 2021
1 parent 1ece73e commit 83eab8d
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 8 deletions.
10 changes: 6 additions & 4 deletions lib/rules/valid-define-emits.js
Expand Up @@ -70,17 +70,19 @@ module.exports = {
}
},
Identifier(node) {
for (const def of emitsDefExpressions) {
if (utils.inRange(def.range, node)) {
for (const defineEmits of emitsDefExpressions) {
if (utils.inRange(defineEmits.range, node)) {
const variable = findVariable(context.getScope(), node)
if (
variable &&
variable.references.some((ref) => ref.identifier === node)
) {
if (
variable.defs.length &&
variable.defs.every((def) =>
utils.inRange(scriptSetup.range, def.name)
variable.defs.every(
(def) =>
utils.inRange(scriptSetup.range, def.name) &&
!utils.inRange(defineEmits.range, def.name)
)
) {
//`defineEmits` are referencing locally declared variables.
Expand Down
10 changes: 6 additions & 4 deletions lib/rules/valid-define-props.js
Expand Up @@ -71,17 +71,19 @@ module.exports = {
}
},
Identifier(node) {
for (const def of propsDefExpressions) {
if (utils.inRange(def.range, node)) {
for (const defineProps of propsDefExpressions) {
if (utils.inRange(defineProps.range, node)) {
const variable = findVariable(context.getScope(), node)
if (
variable &&
variable.references.some((ref) => ref.identifier === node)
) {
if (
variable.defs.length &&
variable.defs.every((def) =>
utils.inRange(scriptSetup.range, def.name)
variable.defs.every(
(def) =>
utils.inRange(scriptSetup.range, def.name) &&
!utils.inRange(defineProps.range, def.name)
)
) {
//`defineProps` are referencing locally declared variables.
Expand Down
12 changes: 12 additions & 0 deletions tests/lib/rules/valid-define-emits.js
Expand Up @@ -61,6 +61,18 @@ tester.run('valid-define-emits', rule, {
defineEmits(def)
</script>
`
},
{
filename: 'test.vue',
code: `
<script setup>
defineEmits({
notify (payload) {
return typeof payload === 'string'
}
})
</script>
`
}
],
invalid: [
Expand Down
15 changes: 15 additions & 0 deletions tests/lib/rules/valid-define-props.js
Expand Up @@ -61,6 +61,21 @@ tester.run('valid-define-props', rule, {
defineProps(def)
</script>
`
},
{
filename: 'test.vue',
code: `
<script setup>
defineProps({
addFunction: {
type: Function,
default (a, b) {
return a + b
}
}
})
</script>
`
}
],
invalid: [
Expand Down

0 comments on commit 83eab8d

Please sign in to comment.