Skip to content

Commit

Permalink
Fix false negative with require-valid-default-prop (#1469)
Browse files Browse the repository at this point in the history
  • Loading branch information
frozenbonito committed Apr 12, 2021
1 parent 8bdb2a9 commit 26d9920
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 2 deletions.
5 changes: 3 additions & 2 deletions lib/rules/require-valid-default-prop.js
Expand Up @@ -49,10 +49,11 @@ function getPropertyNode(obj, name) {
}

/**
* @param {Expression} node
* @param {Expression} targetNode
* @returns {string[]}
*/
function getTypes(node) {
function getTypes(targetNode) {
const node = utils.skipTSAsExpression(targetNode)
if (node.type === 'Identifier') {
return [node.name]
} else if (node.type === 'ArrayExpression') {
Expand Down
90 changes: 90 additions & 0 deletions tests/lib/rules/require-valid-default-prop.js
Expand Up @@ -207,6 +207,51 @@ ruleTester.run('require-valid-default-prop', rule, {
}
}`,
parserOptions
},
{
filename: 'test.vue',
code: `export default Vue.extend({
props: {
foo: {
type: Array as PropType<string[]>,
default: () => []
}
}
});
`,
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
parser: require.resolve('@typescript-eslint/parser'),
errors: errorMessage('function')
},
{
filename: 'test.vue',
code: `export default Vue.extend({
props: {
foo: {
type: Object as PropType<{ [key: number]: number }>,
default: () => {}
}
}
});
`,
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
parser: require.resolve('@typescript-eslint/parser'),
errors: errorMessage('function')
},
{
filename: 'test.vue',
code: `export default Vue.extend({
props: {
foo: {
type: Function as PropType<() => number>,
default: () => 10
}
}
});
`,
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
parser: require.resolve('@typescript-eslint/parser'),
errors: errorMessage('function')
}
],

Expand Down Expand Up @@ -781,6 +826,51 @@ ruleTester.run('require-valid-default-prop', rule, {
}`,
parserOptions,
errors: errorMessage('string')
},
{
filename: 'test.vue',
code: `export default Vue.extend({
props: {
foo: {
type: Array as PropType<string[]>,
default: []
}
}
});
`,
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
parser: require.resolve('@typescript-eslint/parser'),
errors: errorMessage('function')
},
{
filename: 'test.vue',
code: `export default Vue.extend({
props: {
foo: {
type: Object as PropType<{ [key: number]: number }>,
default: {}
}
}
});
`,
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
parser: require.resolve('@typescript-eslint/parser'),
errors: errorMessage('function')
},
{
filename: 'test.vue',
code: `export default Vue.extend({
props: {
foo: {
type: Function as PropType<() => number>,
default: 10
}
}
});
`,
parserOptions: { ecmaVersion: 6, sourceType: 'module' },
parser: require.resolve('@typescript-eslint/parser'),
errors: errorMessage('function')
}
]
})

0 comments on commit 26d9920

Please sign in to comment.