Skip to content

Commit 256ff6e

Browse files
committed
feat(plugin): support plugin rules
Closes #14
1 parent e6b6803 commit 256ff6e

File tree

5 files changed

+33
-12
lines changed

5 files changed

+33
-12
lines changed

bin.js

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,13 @@ var eslint = require('eslint')
99
var isAbsolute = require('path-is-absolute')
1010
var findNewRules = require('./index')
1111

12-
var currentRules = getRules()
13-
var newRules = findNewRules(currentRules)
12+
var configFile = getConfigFile()
13+
var config = getConfig(configFile)
14+
15+
var currentRules = getCurrentRules(config)
16+
var pluginRules = getPluginRules(config)
17+
18+
var newRules = findNewRules(currentRules, pluginRules)
1419

1520
if (newRules.length) {
1621
console.log('New rules to add to the config: ' + newRules.join(', ') + '.') // eslint-disable-line no-console
@@ -45,13 +50,21 @@ function getConfig(file) {
4550
// point to the particular config
4651
configFile: file,
4752
})
48-
var config = cliEngine.getConfigForFile(file)
49-
return config
53+
return cliEngine.getConfigForFile(file)
54+
}
55+
56+
function getCurrentRules(conf) {
57+
var rules = Object.keys(conf.rules)
58+
return rules
5059
}
5160

52-
function getRules() {
53-
var configFile = getConfigFile()
54-
var config = getConfig(configFile)
55-
var rules = Object.keys(config.rules)
61+
function getPluginRules(conf) {
62+
var rules = []
63+
var plugins = conf.plugins
64+
if (plugins) {
65+
plugins.forEach(function normalizePluginRule(plugin) {
66+
rules.concat(require('eslint-plugin-' + plugin).rules)
67+
})
68+
}
5669
return rules
5770
}

index.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@ var difference = require('lodash.difference')
33

44
module.exports = findNewRules
55

6-
function findNewRules(currentRules) {
6+
function findNewRules(currentRules, pluginRules) {
77
var allRules = fs
88
.readdirSync('./node_modules/eslint/lib/rules')
99
.map(function removeJsFromFilename(filename) {
1010
return filename.replace(/\.js$/, '')
1111
})
1212

13+
if (pluginRules) {
14+
allRules = allRules.concat(pluginRules)
15+
}
16+
1317
return difference(allRules, currentRules)
1418
}
1519

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
"cz-conventional-changelog": "1.1.5",
3737
"eslint": "2.4.0",
3838
"eslint-config-kentcdodds": "6.0.0",
39+
"eslint-plugin-react": "^4.2.3",
3940
"ghooks": "1.0.3",
4041
"npm-run-all": "1.5.3",
4142
"nyc": "6.1.1",

test/fixtures/.eslintrc.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
module.exports = {
22
rules: {
33
"no-console": [2],
4-
}
4+
},
5+
"plugins": [
6+
"react"
7+
]
58
}

test/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ const findNewRules = proxyquire('../index', {
88
})
99

1010
test('returns the difference between what it finds in eslint/lib/rules and the rules array it is passed', t => {
11-
const missingRules = findNewRules(['baz-thing', 'foo-rule'])
12-
t.same(missingRules, ['bar-rule'])
11+
const missingRules = findNewRules(['baz-thing', 'foo-rule'], ['react-foo'])
12+
t.same(missingRules, ['bar-rule', 'react-foo'])
1313
})
1414

1515
test('returns an empty array if there is no difference', t => {

0 commit comments

Comments
 (0)