diff --git a/lib/rules/require-default-prop.js b/lib/rules/require-default-prop.js index d35c2f8ea..e3a8a4076 100644 --- a/lib/rules/require-default-prop.js +++ b/lib/rules/require-default-prop.js @@ -175,6 +175,12 @@ module.exports = { withDefaults && withDefaultsExpressions ) { + if (prop.required) { + continue + } + if (prop.types.length === 1 && prop.types[0] === 'Boolean') { + continue + } if (!withDefaultsExpressions[prop.propName]) { context.report({ node: prop.node, diff --git a/tests/lib/rules/require-default-prop.js b/tests/lib/rules/require-default-prop.js index d93c5e5da..e129ae84d 100644 --- a/tests/lib/rules/require-default-prop.js +++ b/tests/lib/rules/require-default-prop.js @@ -235,7 +235,7 @@ ruleTester.run('require-default-prop', rule, { code: ` @@ -251,7 +251,7 @@ ruleTester.run('require-default-prop', rule, { code: ` @@ -267,7 +267,7 @@ ruleTester.run('require-default-prop', rule, { code: ` + `, + parser: require.resolve('vue-eslint-parser'), + parserOptions: { + ...parserOptions, + parser: require.resolve('@typescript-eslint/parser') + } + }, + { + filename: 'test.vue', + code: ` + + `, + parser: require.resolve('vue-eslint-parser'), + parserOptions: { + ...parserOptions, + parser: require.resolve('@typescript-eslint/parser') + } } ], @@ -503,7 +550,7 @@ ruleTester.run('require-default-prop', rule, { code: ` diff --git a/tests/lib/utils/index.js b/tests/lib/utils/index.js index df45da856..b4a052090 100644 --- a/tests/lib/utils/index.js +++ b/tests/lib/utils/index.js @@ -1,13 +1,13 @@ 'use strict' -const babelEslint = require('babel-eslint') const espree = require('espree') const utils = require('../../../lib/utils/index') const assert = require('assert') describe('getComputedProperties', () => { const parse = function (code) { - return babelEslint.parse(code).body[0].declarations[0].init + return espree.parse(code, { ecmaVersion: 2020 }).body[0].declarations[0] + .init } it('should return empty array when there is no computed property', () => { @@ -112,7 +112,8 @@ describe('getComputedProperties', () => { describe('getStaticPropertyName', () => { const parse = function (code) { - return babelEslint.parse(code).body[0].declarations[0].init + return espree.parse(code, { ecmaVersion: 2020 }).body[0].declarations[0] + .init } it('should parse property expression with identifier', () => { @@ -137,7 +138,8 @@ describe('getStaticPropertyName', () => { describe('getStringLiteralValue', () => { const parse = function (code) { - return babelEslint.parse(code).body[0].declarations[0].init + return espree.parse(code, { ecmaVersion: 2020 }).body[0].declarations[0] + .init } it('should parse literal', () => { @@ -275,7 +277,8 @@ describe('getMemberChaining', () => { describe('getRegisteredComponents', () => { const parse = function (code) { - return babelEslint.parse(code).body[0].declarations[0].init + return espree.parse(code, { ecmaVersion: 2020 }).body[0].declarations[0] + .init } it('should return empty array when there are no components registered', () => { @@ -335,7 +338,8 @@ describe('getRegisteredComponents', () => { describe('getComponentProps', () => { const parse = function (code) { - const data = babelEslint.parse(code).body[0].declarations[0].init + const data = espree.parse(code, { ecmaVersion: 2020 }).body[0] + .declarations[0].init return utils.getComponentProps(data) }