From 62e26203f5a1c0c9def7cb3425761599a8dd5500 Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Wed, 20 Apr 2022 09:10:36 +0900 Subject: [PATCH] Fix false positives for script setup with ts literal type in `vue/require-valid-default-prop` (#1854) * Fix false positives for script setup with ts literal type in `vue/require-valid-default-prop` * remove dupe test * Add testcase * Update tests/lib/rules/require-valid-default-prop.js Co-authored-by: Flo Edelmann Co-authored-by: Flo Edelmann --- lib/utils/ts-ast-utils.js | 30 +++++++++---------- tests/lib/rules/require-valid-default-prop.js | 23 ++++++++++++++ 2 files changed, 37 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..c08a0403a 100644 --- a/tests/lib/rules/require-valid-default-prop.js +++ b/tests/lib/rules/require-valid-default-prop.js @@ -252,6 +252,29 @@ ruleTester.run('require-valid-default-prop', rule, { parserOptions: { ecmaVersion: 6, sourceType: 'module' }, parser: require.resolve('@typescript-eslint/parser'), errors: errorMessage('function') + }, + { + // https://github.com/vuejs/eslint-plugin-vue/issues/1853 + filename: 'test.vue', + code: ``, + parserOptions: { + ecmaVersion: 6, + sourceType: 'module', + parser: require.resolve('@typescript-eslint/parser') + }, + parser: require.resolve('vue-eslint-parser') } ],