From 29eeff348702add5a930969336f0238af0647211 Mon Sep 17 00:00:00 2001 From: Bradley Spaulding Date: Wed, 7 Jun 2017 13:35:42 -0500 Subject: [PATCH 1/2] split-platform-components works on '.test' files also --- lib/rules/split-platform-components.js | 4 +-- tests/lib/rules/split-platform-components.js | 36 ++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/lib/rules/split-platform-components.js b/lib/rules/split-platform-components.js index 4fa5916..9c5d7d8 100644 --- a/lib/rules/split-platform-components.js +++ b/lib/rules/split-platform-components.js @@ -37,11 +37,11 @@ module.exports = function (context) { components.forEach((node) => { const propName = getName(node); - if (propName.includes('IOS') && !filename.endsWith('.ios.js')) { + if (propName.includes('IOS') && !filename.match(/\.ios(\.test)?\.js$/)) { context.report(node, containsAndroidAndIOS ? conflictMessage : iosMessage); } - if (propName.includes('Android') && !filename.endsWith('.android.js')) { + if (propName.includes('Android') && !filename.match(/\.android(\.test)?\.js$/)) { context.report(node, containsAndroidAndIOS ? conflictMessage : androidMessage); } }); diff --git a/tests/lib/rules/split-platform-components.js b/tests/lib/rules/split-platform-components.js index 10d8a8f..eb5207c 100644 --- a/tests/lib/rules/split-platform-components.js +++ b/tests/lib/rules/split-platform-components.js @@ -112,6 +112,42 @@ ruleTester.run('split-platform-components', rule, { classes: true, jsx: true, }, + }, { + code: [ + 'const React = require(\'react-native\');', + 'const {', + ' ActivityIndicatiorIOS,', + '} = React', + 'const Hello = React.createClass({', + ' render: function() {', + ' return ;', + ' }', + '});', + ].join('\n'), + filename: 'Hello.ios.test.js', + parser: 'babel-eslint', + ecmaFeatures: { + classes: true, + jsx: true, + }, + }, { + code: [ + 'const React = require(\'react-native\');', + 'const {', + ' ProgressBarAndroid,', + '} = React', + 'const Hello = React.createClass({', + ' render: function() {', + ' return ;', + ' }', + '});', + ].join('\n'), + parser: 'babel-eslint', + filename: 'Hello.android.test.js', + ecmaFeatures: { + classes: true, + jsx: true, + }, }], invalid: [{ From 069aa0b192d433cf7c0214c9ec0a9cbffde0a5ba Mon Sep 17 00:00:00 2001 From: Bradley Spaulding Date: Mon, 12 Jun 2017 10:38:48 -0700 Subject: [PATCH 2/2] Extracted regex rule options for split-platform-components --- lib/rules/split-platform-components.js | 23 +++++++++++++++++--- tests/lib/rules/split-platform-components.js | 6 +++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/rules/split-platform-components.js b/lib/rules/split-platform-components.js index 9c5d7d8..4a56287 100644 --- a/lib/rules/split-platform-components.js +++ b/lib/rules/split-platform-components.js @@ -11,6 +11,12 @@ module.exports = function (context) { const androidMessage = 'Android components should be placed in android files'; const iosMessage = 'IOS components should be placed in ios files'; const conflictMessage = 'IOS and Android components can\'t be mixed'; + const iosPathRegex = context.options[0] && context.options[0].iosPathRegex + ? new RegExp(context.options[0].iosPathRegex) + : /\.ios\.js$/; + const androidPathRegex = context.options[0] && context.options[0].androidPathRegex + ? new RegExp(context.options[0].androidPathRegex) + : /\.android\.js$/; function getName(node) { if (node.type === 'Property') { @@ -37,11 +43,11 @@ module.exports = function (context) { components.forEach((node) => { const propName = getName(node); - if (propName.includes('IOS') && !filename.match(/\.ios(\.test)?\.js$/)) { + if (propName.includes('IOS') && !filename.match(iosPathRegex)) { context.report(node, containsAndroidAndIOS ? conflictMessage : iosMessage); } - if (propName.includes('Android') && !filename.match(/\.android(\.test)?\.js$/)) { + if (propName.includes('Android') && !filename.match(androidPathRegex)) { context.report(node, containsAndroidAndIOS ? conflictMessage : androidMessage); } }); @@ -71,4 +77,15 @@ module.exports = function (context) { }; }; -module.exports.schema = []; +module.exports.schema = [{ + type: 'object', + properties: { + androidPathRegex: { + type: 'string', + }, + iosPathRegex: { + type: 'string', + }, + }, + additionalProperties: false, +}]; diff --git a/tests/lib/rules/split-platform-components.js b/tests/lib/rules/split-platform-components.js index eb5207c..69cc365 100644 --- a/tests/lib/rules/split-platform-components.js +++ b/tests/lib/rules/split-platform-components.js @@ -124,6 +124,9 @@ ruleTester.run('split-platform-components', rule, { ' }', '});', ].join('\n'), + options: [{ + iosPathRegex: '\\.ios(\\.test)?\\.js$', + }], filename: 'Hello.ios.test.js', parser: 'babel-eslint', ecmaFeatures: { @@ -143,6 +146,9 @@ ruleTester.run('split-platform-components', rule, { '});', ].join('\n'), parser: 'babel-eslint', + options: [{ + androidPathRegex: '\\.android(\\.test)?\\.js$', + }], filename: 'Hello.android.test.js', ecmaFeatures: { classes: true,