From 264935e8eb6ef8f476c1c59e102ce29b15235d2d Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Mon, 22 May 2023 14:02:41 +0900 Subject: [PATCH 1/4] Fix false positive for unknown prop in `vue/no-undef-properties` rule --- lib/rules/no-undef-properties.js | 11 +++++++++++ tests/lib/rules/no-undef-properties.js | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/lib/rules/no-undef-properties.js b/lib/rules/no-undef-properties.js index 36650f555..1e8d68e93 100644 --- a/lib/rules/no-undef-properties.js +++ b/lib/rules/no-undef-properties.js @@ -127,6 +127,8 @@ module.exports = { /** @type { Set } */ this.reported = new Set() + + this.haveUnknownProperty = false } /** * Report @@ -135,6 +137,7 @@ module.exports = { * @param {boolean} [options.props] */ verifyReferences(references, options) { + if (this.haveUnknownProperty) return const report = this.report.bind(this) verifyUndefProperties(this.defineProperties, references, null) @@ -206,6 +209,10 @@ module.exports = { } }) } + + markAsHaveUnknownProperty() { + this.haveUnknownProperty = true + } } /** @type {Map} */ @@ -280,6 +287,10 @@ module.exports = { const ctx = getVueComponentContext(programNode) for (const prop of props) { + if (prop.type === 'unknown') { + ctx.markAsHaveUnknownProperty() + return + } if (!prop.propName) { continue } diff --git a/tests/lib/rules/no-undef-properties.js b/tests/lib/rules/no-undef-properties.js index 8b8ebbb1d..d215829c1 100644 --- a/tests/lib/rules/no-undef-properties.js +++ b/tests/lib/rules/no-undef-properties.js @@ -535,6 +535,26 @@ tester.run('no-undef-properties', rule, { }, }; ` + }, + + { + // unknown type + filename: 'test.vue', + code: ` + + + `, + parserOptions: { + parser: require.resolve('@typescript-eslint/parser') + } } ], From 33bc8774cc51bb0ad36e5ae894567ea6e2e15e10 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Mon, 22 May 2023 14:09:51 +0900 Subject: [PATCH 2/4] fix testcase --- tests/lib/rules/no-undef-properties.js | 35 +++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/tests/lib/rules/no-undef-properties.js b/tests/lib/rules/no-undef-properties.js index d215829c1..cfdc13b6c 100644 --- a/tests/lib/rules/no-undef-properties.js +++ b/tests/lib/rules/no-undef-properties.js @@ -6,6 +6,9 @@ const RuleTester = require('eslint').RuleTester const rule = require('../../../lib/rules/no-undef-properties') +const { + getTypeScriptFixtureTestOptions +} = require('../../test-utils/typescript') const tester = new RuleTester({ parser: require.resolve('vue-eslint-parser'), @@ -542,15 +545,15 @@ tester.run('no-undef-properties', rule, { filename: 'test.vue', code: ` `, parserOptions: { parser: require.resolve('@typescript-eslint/parser') @@ -1149,6 +1152,30 @@ tester.run('no-undef-properties', rule, { column: 46 } ] + }, + + { + // unknown type + filename: 'test.vue', + code: ` + + + `, + ...getTypeScriptFixtureTestOptions(), + errors: [ + { + message: "'unknown' is not defined.", + line: 11 + } + ] } ] }) From 3c5626c71e95c9174f0b3823b118cad53b496a74 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Mon, 22 May 2023 14:10:34 +0900 Subject: [PATCH 3/4] fix test case --- tests/lib/rules/no-undef-properties.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/lib/rules/no-undef-properties.js b/tests/lib/rules/no-undef-properties.js index cfdc13b6c..9a97fe1a9 100644 --- a/tests/lib/rules/no-undef-properties.js +++ b/tests/lib/rules/no-undef-properties.js @@ -1155,7 +1155,7 @@ tester.run('no-undef-properties', rule, { }, { - // unknown type + // known type filename: 'test.vue', code: `