From ad3d774d9e261e77b9906b5a952fbb58a64e64da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Nowak?= Date: Thu, 11 Apr 2019 08:41:00 +0200 Subject: [PATCH] Run deep booleans name check only if option is true --- docs/rules/boolean-prop-naming.md | 15 ++++++++++++++- lib/rules/boolean-prop-naming.js | 6 +++++- tests/lib/rules/boolean-prop-naming.js | 12 +++++++++--- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/docs/rules/boolean-prop-naming.md b/docs/rules/boolean-prop-naming.md index 71f4adb65b..541b8296f2 100644 --- a/docs/rules/boolean-prop-naming.md +++ b/docs/rules/boolean-prop-naming.md @@ -30,7 +30,12 @@ var Hello = createReactClass({ ```js ... -"react/boolean-prop-naming": [, { "propTypeNames": Array, "rule": , "message": }] +"react/boolean-prop-naming": [, { + "propTypeNames": Array, + "rule": , + "message": , + "validateNested": +}] ... ``` @@ -86,3 +91,11 @@ And the failure would look like so: ``` It is better if your prop (something) matches this pattern: (^is[A-Z]([A-Za-z0-9]?)+) ``` + +### `validateNested` + +This value is boolean. It tells if nested props should be validated as well. By default this is set to false but you can change it to true, to validate deeper layers of object: + +```jsx +"react/boolean-prop-naming": ["error", { "validateNested": true }] +``` diff --git a/lib/rules/boolean-prop-naming.js b/lib/rules/boolean-prop-naming.js index 9ba632a2d0..bc7394d327 100644 --- a/lib/rules/boolean-prop-naming.js +++ b/lib/rules/boolean-prop-naming.js @@ -41,6 +41,10 @@ module.exports = { message: { minLength: 1, type: 'string' + }, + validateNested: { + default: false, + type: 'boolean' } }, type: 'object' @@ -152,7 +156,7 @@ module.exports = { proptypes = proptypes || []; proptypes.forEach(prop => { - if (nestedPropTypes(prop)) { + if (config.validateNested && nestedPropTypes(prop)) { runCheck(prop.value.arguments[0].properties, addInvalidProp); return; } diff --git a/tests/lib/rules/boolean-prop-naming.js b/tests/lib/rules/boolean-prop-naming.js index f234654939..09bcb8982d 100644 --- a/tests/lib/rules/boolean-prop-naming.js +++ b/tests/lib/rules/boolean-prop-naming.js @@ -408,7 +408,11 @@ ruleTester.run('boolean-prop-naming', rule, { }) }) }; - ` + `, + options: [{ + rule: '^is[A-Z]([A-Za-z0-9]?)+', + validateNested: true + }] }], invalid: [{ @@ -861,7 +865,8 @@ ruleTester.run('boolean-prop-naming', rule, { }; `, options: [{ - rule: '^is[A-Z]([A-Za-z0-9]?)+' + rule: '^is[A-Z]([A-Za-z0-9]?)+', + validateNested: true }], errors: [{ message: 'Prop name (failingItIs) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)' @@ -886,7 +891,8 @@ ruleTester.run('boolean-prop-naming', rule, { }; `, options: [{ - rule: '^is[A-Z]([A-Za-z0-9]?)+' + rule: '^is[A-Z]([A-Za-z0-9]?)+', + validateNested: true }], errors: [{ message: 'Prop name (failingItIs) doesn\'t match rule (^is[A-Z]([A-Za-z0-9]?)+)'