diff --git a/lib/rules/require-prop-types.js b/lib/rules/require-prop-types.js index 17037853f..3978db3f0 100644 --- a/lib/rules/require-prop-types.js +++ b/lib/rules/require-prop-types.js @@ -92,12 +92,24 @@ module.exports = { // Public // ---------------------------------------------------------------------- - return utils.executeOnVue(context, (obj) => { - const props = utils.getComponentProps(obj) + return utils.compositingVisitors( + utils.defineScriptSetupVisitor(context, { + onDefinePropsEnter(_node, props) { + for (const prop of props) { + if (prop.type === 'type') { + continue + } + checkProperty(prop) + } + } + }), + utils.executeOnVue(context, (obj) => { + const props = utils.getComponentProps(obj) - for (const prop of props) { - checkProperty(prop) - } - }) + for (const prop of props) { + checkProperty(prop) + } + }) + ) } } diff --git a/tests/lib/rules/require-prop-types.js b/tests/lib/rules/require-prop-types.js index 4d7d153b3..990126536 100644 --- a/tests/lib/rules/require-prop-types.js +++ b/tests/lib/rules/require-prop-types.js @@ -158,6 +158,32 @@ ruleTester.run('require-prop-types', rule, { `, parserOptions: { ecmaVersion: 6, sourceType: 'module' }, parser: require.resolve('@typescript-eslint/parser') + }, + { + filename: 'test.vue', + code: ` + + `, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, + parser: require.resolve('vue-eslint-parser') + }, + { + filename: 'test.vue', + code: ` + + `, + parserOptions: { + ecmaVersion: 6, + sourceType: 'module', + parser: require.resolve('@typescript-eslint/parser') + }, + parser: require.resolve('vue-eslint-parser') } ], @@ -305,6 +331,40 @@ ruleTester.run('require-prop-types', rule, { line: 4 } ] + }, + { + filename: 'test.vue', + code: ` + + `, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, + parser: require.resolve('vue-eslint-parser'), + errors: [ + { + message: 'Prop "foo" should define at least its type.', + line: 4 + } + ] + }, + { + filename: 'test.vue', + code: ` + + `, + parserOptions: { ecmaVersion: 6, sourceType: 'module' }, + parser: require.resolve('vue-eslint-parser'), + errors: [ + { + message: 'Prop "foo" should define at least its type.', + line: 3 + } + ] } ] })