From e2b87f21092e3528bf24d62aa349988d3124a827 Mon Sep 17 00:00:00 2001 From: yoyo930021 Date: Tue, 31 Mar 2020 22:02:12 +0800 Subject: [PATCH] Fix detect Vue3 defineComponent --- lib/utils/index.js | 6 +++++ tests/lib/rules/no-dupe-keys.js | 38 ++++++++++++++++++++++++++++++++ tests/lib/utils/vue-component.js | 6 +++++ 3 files changed, 50 insertions(+) diff --git a/lib/utils/index.js b/lib/utils/index.js index e784f2ab3..b302cd6cb 100644 --- a/lib/utils/index.js +++ b/lib/utils/index.js @@ -550,6 +550,12 @@ module.exports = { const isAppVueComponent = isObjectArgument(node) return isAppVueComponent } + if (callee.name === 'defineComponent') { + // for Vue.js 3.x + // defineComponent({}) + const isDestructedVueComponent = isObjectArgument(node) + return isDestructedVueComponent + } } } diff --git a/tests/lib/rules/no-dupe-keys.js b/tests/lib/rules/no-dupe-keys.js index f1a35568a..8e65d7074 100644 --- a/tests/lib/rules/no-dupe-keys.js +++ b/tests/lib/rules/no-dupe-keys.js @@ -374,6 +374,44 @@ ruleTester.run('no-dupe-keys', rule, { message: 'Duplicated key \'bar\'.', line: 7 }] + }, + { + filename: 'test.js', + code: ` + defineComponent({ + foo: { + bar: String + }, + data: { + bar: null + }, + }) + `, + options: [{ groups: ['foo'] }], + parserOptions: { ecmaVersion: 6 }, + errors: [{ + message: 'Duplicated key \'bar\'.', + line: 7 + }] + }, + { + filename: 'test.js', + code: ` + export default defineComponent({ + foo: { + bar: String + }, + data: { + bar: null + }, + }) + `, + options: [{ groups: ['foo'] }], + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, + errors: [{ + message: 'Duplicated key \'bar\'.', + line: 7 + }] } ] }) diff --git a/tests/lib/utils/vue-component.js b/tests/lib/utils/vue-component.js index 69d663e92..794075d47 100644 --- a/tests/lib/utils/vue-component.js +++ b/tests/lib/utils/vue-component.js @@ -311,6 +311,12 @@ function invalidTests (ext) { `, parserOptions, errors: (ext === 'js' ? [] : [makeError(2)]).concat([makeError(8)]) + }, + { + filename: `test.${ext}`, + code: `export default defineComponent({})`, + parserOptions, + errors: [makeError(1)] } ] }