From bd69427db7cf4469ca50e76d0efb8a686c19e6f3 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Tue, 19 Apr 2022 19:33:46 +0900 Subject: [PATCH 1/4] Fix false positives for script setup with ts literal type in `vue/require-valid-default-prop` --- lib/utils/ts-ast-utils.js | 30 ++++++++-------- tests/lib/rules/require-valid-default-prop.js | 36 +++++++++++++++++++ 2 files changed, 50 insertions(+), 16 deletions(-) diff --git a/lib/utils/ts-ast-utils.js b/lib/utils/ts-ast-utils.js index dcc6c7cf5..f5cf9691a 100644 --- a/lib/utils/ts-ast-utils.js +++ b/lib/utils/ts-ast-utils.js @@ -260,23 +260,21 @@ function inferRuntimeType(context, node, checked = new Set()) { return ['Array'] case 'TSLiteralType': - switch (node.literal.type) { - //@ts-ignore ? - case 'StringLiteral': - return ['String'] - //@ts-ignore ? - case 'BooleanLiteral': - return ['Boolean'] - //@ts-ignore ? - case 'NumericLiteral': - //@ts-ignore ? - // eslint-disable-next-line no-fallthrough - case 'BigIntLiteral': - return ['Number'] - default: - return [`null`] + if (node.literal.type === 'Literal') { + switch (typeof node.literal.value) { + case 'boolean': + return ['Boolean'] + case 'string': + return ['String'] + case 'number': + case 'bigint': + return ['Number'] + } + if (node.literal.value instanceof RegExp) { + return ['RegExp'] + } } - + return [`null`] case 'TSTypeReference': if (node.typeName.type === 'Identifier') { const variable = findVariable(context.getScope(), node.typeName.name) diff --git a/tests/lib/rules/require-valid-default-prop.js b/tests/lib/rules/require-valid-default-prop.js index e353edf58..3e34951b7 100644 --- a/tests/lib/rules/require-valid-default-prop.js +++ b/tests/lib/rules/require-valid-default-prop.js @@ -42,6 +42,24 @@ function errorMessageForFunction(type) { const ruleTester = new RuleTester() ruleTester.run('require-valid-default-prop', rule, { valid: [ + { + filename: 'test.vue', + code: ``, + parserOptions: { + ecmaVersion: 6, + sourceType: 'module', + parser: require.resolve('@typescript-eslint/parser') + }, + parser: require.resolve('vue-eslint-parser') + }, { filename: 'test.vue', code: `export default { @@ -252,6 +270,24 @@ ruleTester.run('require-valid-default-prop', rule, { parserOptions: { ecmaVersion: 6, sourceType: 'module' }, parser: require.resolve('@typescript-eslint/parser'), errors: errorMessage('function') + }, + { + filename: 'test.vue', + code: ``, + parserOptions: { + ecmaVersion: 6, + sourceType: 'module', + parser: require.resolve('@typescript-eslint/parser') + }, + parser: require.resolve('vue-eslint-parser') } ], From fd93e5609e70fdd3c6d24ea094352f1b99ed9d70 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Tue, 19 Apr 2022 19:37:43 +0900 Subject: [PATCH 2/4] remove dupe test --- tests/lib/rules/require-valid-default-prop.js | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/tests/lib/rules/require-valid-default-prop.js b/tests/lib/rules/require-valid-default-prop.js index 3e34951b7..66e6a9855 100644 --- a/tests/lib/rules/require-valid-default-prop.js +++ b/tests/lib/rules/require-valid-default-prop.js @@ -42,24 +42,6 @@ function errorMessageForFunction(type) { const ruleTester = new RuleTester() ruleTester.run('require-valid-default-prop', rule, { valid: [ - { - filename: 'test.vue', - code: ``, - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - parser: require.resolve('@typescript-eslint/parser') - }, - parser: require.resolve('vue-eslint-parser') - }, { filename: 'test.vue', code: `export default { From 29a0945e12c6b10c0b6c5ac2f5bfb48e58fe04ff Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Tue, 19 Apr 2022 19:39:54 +0900 Subject: [PATCH 3/4] Add testcase --- tests/lib/rules/require-valid-default-prop.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/lib/rules/require-valid-default-prop.js b/tests/lib/rules/require-valid-default-prop.js index 66e6a9855..612f954d6 100644 --- a/tests/lib/rules/require-valid-default-prop.js +++ b/tests/lib/rules/require-valid-default-prop.js @@ -258,10 +258,14 @@ ruleTester.run('require-valid-default-prop', rule, { code: ``, parserOptions: { From defa8ab335981afd77c8884c59444a494afcb368 Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Tue, 19 Apr 2022 20:14:06 +0900 Subject: [PATCH 4/4] Update tests/lib/rules/require-valid-default-prop.js Co-authored-by: Flo Edelmann --- tests/lib/rules/require-valid-default-prop.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/lib/rules/require-valid-default-prop.js b/tests/lib/rules/require-valid-default-prop.js index 612f954d6..c08a0403a 100644 --- a/tests/lib/rules/require-valid-default-prop.js +++ b/tests/lib/rules/require-valid-default-prop.js @@ -254,6 +254,7 @@ ruleTester.run('require-valid-default-prop', rule, { errors: errorMessage('function') }, { + // https://github.com/vuejs/eslint-plugin-vue/issues/1853 filename: 'test.vue', code: `