From 06c11f26524895a2c0300b4d812cdaf7c9260777 Mon Sep 17 00:00:00 2001 From: st-sloth Date: Mon, 18 Feb 2019 16:31:01 +0500 Subject: [PATCH] Fix: no-boolean-default with 'default-false' on boolean props with unset default (#821) --- lib/rules/no-boolean-default.js | 7 +- tests/lib/rules/no-boolean-default.js | 151 +++++++++++++++++++++++++- 2 files changed, 154 insertions(+), 4 deletions(-) diff --git a/lib/rules/no-boolean-default.js b/lib/rules/no-boolean-default.js index d0e3f36a2..5b436b722 100644 --- a/lib/rules/no-boolean-default.js +++ b/lib/rules/no-boolean-default.js @@ -78,10 +78,13 @@ module.exports = { break case 'default-false': - if (defaultNode.value.value !== false) { + if ( + defaultNode && + defaultNode.value.value !== false + ) { context.report({ node: defaultNode, - message: 'Boolean prop should be defaulted to false.' + message: 'Boolean prop should only be defaulted to false.' }) } break diff --git a/tests/lib/rules/no-boolean-default.js b/tests/lib/rules/no-boolean-default.js index 9f87a3a34..c113514b9 100644 --- a/tests/lib/rules/no-boolean-default.js +++ b/tests/lib/rules/no-boolean-default.js @@ -35,6 +35,53 @@ ruleTester.run('no-boolean-default', rule, { } ` }, + { + filename: 'test.vue', + code: ` + export default { + props: { + enabled: Boolean + } + } + `, + options: ['no-default'] + }, + { + filename: 'test.vue', + code: ` + export default { + props: { + enabled: Boolean + } + } + `, + options: ['default-false'] + }, + { + filename: 'test.vue', + code: ` + const props = {}; + export default { + props: { + ...props, + enabled: Boolean + } + } + ` + }, + { + filename: 'test.vue', + code: ` + const props = {}; + export default { + props: { + ...props, + enabled: Boolean + } + } + `, + options: ['no-default'] + }, { filename: 'test.vue', code: ` @@ -45,6 +92,21 @@ ruleTester.run('no-boolean-default', rule, { enabled: Boolean } } + `, + options: ['default-false'] + }, + { + filename: 'test.vue', + code: ` + const data = {}; + export default { + props: { + enabled: { + type: Boolean, + ...data + } + } + } ` }, { @@ -62,6 +124,21 @@ ruleTester.run('no-boolean-default', rule, { `, options: ['no-default'] }, + { + filename: 'test.vue', + code: ` + const data = {}; + export default { + props: { + enabled: { + type: Boolean, + ...data + } + } + } + `, + options: ['default-false'] + }, { filename: 'test.vue', code: ` @@ -89,6 +166,30 @@ ruleTester.run('no-boolean-default', rule, { } ` }, + { + filename: 'test.vue', + code: ` + const data = {}; + export default { + props: { + enabled: data + } + } + `, + options: ['no-default'] + }, + { + filename: 'test.vue', + code: ` + const data = {}; + export default { + props: { + enabled: data + } + } + `, + options: ['default-false'] + }, { filename: 'test.vue', code: ` @@ -101,6 +202,34 @@ ruleTester.run('no-boolean-default', rule, { } } ` + }, + { + filename: 'test.vue', + code: ` + const data = {}; + export default { + props: { + enabled: { + ...data + } + } + } + `, + options: ['no-default'] + }, + { + filename: 'test.vue', + code: ` + const data = {}; + export default { + props: { + enabled: { + ...data + } + } + } + `, + options: ['default-false'] } ], @@ -119,7 +248,7 @@ ruleTester.run('no-boolean-default', rule, { `, options: ['default-false'], errors: [{ - message: 'Boolean prop should be defaulted to false.', + message: 'Boolean prop should only be defaulted to false.', line: 6 }] }, @@ -137,7 +266,7 @@ ruleTester.run('no-boolean-default', rule, { `, options: ['default-false'], errors: [{ - message: 'Boolean prop should be defaulted to false.', + message: 'Boolean prop should only be defaulted to false.', line: 6 }] }, @@ -158,6 +287,24 @@ ruleTester.run('no-boolean-default', rule, { message: 'Boolean prop should not set a default (Vue defaults it to false).', line: 6 }] + }, + { + filename: 'test.vue', + code: ` + export default { + props: { + enabled: { + type: Boolean, + default: true, + } + } + } + `, + options: ['no-default'], + errors: [{ + message: 'Boolean prop should not set a default (Vue defaults it to false).', + line: 6 + }] } ] })