Skip to content

Commit 94db4a6

Browse files
authored
Fix false positives for default with type Function in vue/no-deprecated-props-default-this rule (#1522)
1 parent 28dec65 commit 94db4a6

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

Diff for: lib/rules/no-deprecated-props-default-this.js

+26
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,27 @@ module.exports = {
7373
scopeStack = scopeStack.upper
7474
}
7575
}
76+
77+
/**
78+
* @param {Expression|SpreadElement|null} node
79+
*/
80+
function isFunctionIdentifier(node) {
81+
return node && node.type === 'Identifier' && node.name === 'Function'
82+
}
83+
84+
/**
85+
* @param {Expression} node
86+
* @returns {boolean}
87+
*/
88+
function hasFunctionType(node) {
89+
if (isFunctionIdentifier(node)) {
90+
return true
91+
}
92+
if (node.type === 'ArrayExpression') {
93+
return node.elements.some(isFunctionIdentifier)
94+
}
95+
return false
96+
}
7697
return utils.defineVueVisitor(context, {
7798
onVueObjectEnter(node) {
7899
for (const prop of utils.getComponentProps(node)) {
@@ -86,6 +107,11 @@ module.exports = {
86107
if (!def) {
87108
continue
88109
}
110+
const type = utils.findProperty(prop.value, 'type')
111+
if (type && hasFunctionType(type.value)) {
112+
// ignore function type
113+
continue
114+
}
89115
if (def.value.type !== 'FunctionExpression') {
90116
continue
91117
}

Diff for: tests/lib/rules/no-deprecated-props-default-this.js

+25
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,31 @@ ruleTester.run('no-deprecated-props-default-this', rule, {
9696
}
9797
</script>
9898
`
99+
},
100+
{
101+
// https://github.com/vuejs/eslint-plugin-vue/issues/1464
102+
filename: 'test.vue',
103+
code: `
104+
<template>
105+
<button @click="printMessage">Print message</button>
106+
</template>
107+
108+
<script>
109+
110+
export default {
111+
name: 'App',
112+
props: {
113+
message: String,
114+
printMessage: {
115+
type: Function,
116+
default() {
117+
console.log(this.message);
118+
}
119+
}
120+
}
121+
}
122+
</script>
123+
`
99124
}
100125
],
101126

0 commit comments

Comments
 (0)