From b6ef2885e4aff26673fb5d28dc06e45a850fa50d Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Fri, 25 Jun 2021 16:00:03 +0900 Subject: [PATCH] Fix false positives for default with type Function in `vue/no-deprecated-props-default-this` rule --- lib/rules/no-deprecated-props-default-this.js | 26 +++++++++++++++++++ .../rules/no-deprecated-props-default-this.js | 25 ++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/lib/rules/no-deprecated-props-default-this.js b/lib/rules/no-deprecated-props-default-this.js index 5a89da941..7f9b51a1a 100644 --- a/lib/rules/no-deprecated-props-default-this.js +++ b/lib/rules/no-deprecated-props-default-this.js @@ -73,6 +73,27 @@ module.exports = { scopeStack = scopeStack.upper } } + + /** + * @param {Expression|SpreadElement|null} node + */ + function isFunctionIdentifier(node) { + return node && node.type === 'Identifier' && node.name === 'Function' + } + + /** + * @param {Expression} node + * @returns {boolean} + */ + function hasFunctionType(node) { + if (isFunctionIdentifier(node)) { + return true + } + if (node.type === 'ArrayExpression') { + return node.elements.some(isFunctionIdentifier) + } + return false + } return utils.defineVueVisitor(context, { onVueObjectEnter(node) { for (const prop of utils.getComponentProps(node)) { @@ -86,6 +107,11 @@ module.exports = { if (!def) { continue } + const type = utils.findProperty(prop.value, 'type') + if (type && hasFunctionType(type.value)) { + // ignore function type + continue + } if (def.value.type !== 'FunctionExpression') { continue } diff --git a/tests/lib/rules/no-deprecated-props-default-this.js b/tests/lib/rules/no-deprecated-props-default-this.js index 0993e817a..0d5f8ff24 100644 --- a/tests/lib/rules/no-deprecated-props-default-this.js +++ b/tests/lib/rules/no-deprecated-props-default-this.js @@ -96,6 +96,31 @@ ruleTester.run('no-deprecated-props-default-this', rule, { } ` + }, + { + // https://github.com/vuejs/eslint-plugin-vue/issues/1464 + filename: 'test.vue', + code: ` + + + + ` } ],