Skip to content

Commit bd40f1b

Browse files
committed
Merge pull request #27 from sarbbottam/refactor
Refactor
2 parents 40c1513 + bafb885 commit bd40f1b

17 files changed

+242
-228
lines changed

README.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ The intended usage is as an npm script:
2727
{
2828
...
2929
"scripts": {
30-
"find-new-rules": "eslint-find-new-rules eslint-config-yourConfigName"
30+
"find-new-rules": "eslint-find-new-rules path/to/eslint-config"
3131
}
3232
...
3333
}
@@ -65,6 +65,27 @@ It will also default to the `main` in your `package.json`, so you can omit the a
6565
eslint-find-new-rules
6666
```
6767

68+
### As a `require`d module
69+
70+
```
71+
var getRuleFinder = require('./eslint-find-new-rules')
72+
var ruleFinder = getRuleFinder('path/to/eslint-config')
73+
74+
// default to the `main` in your `package.json`
75+
// var ruleFinder = getRuleFinder()
76+
77+
// get all the current, plugin, available and unused rules
78+
// without referring the extended files or documentation
79+
80+
ruleFinder.getCurrentRules()
81+
82+
ruleFinder.getPluginRules()
83+
84+
ruleFinder.getAllAvailableRules()
85+
86+
ruleFinder.getUnusedRules()
87+
```
88+
6889
## Contributors
6990

7091
Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):

bin-utils.js

Lines changed: 0 additions & 68 deletions
This file was deleted.

index.js

Lines changed: 0 additions & 19 deletions
This file was deleted.

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "eslint-find-new-rules",
33
"version": "0.0.0-semantically-released",
44
"description": "Find built-in ESLint rules you don't have in your custom config.",
5-
"main": "index.js",
5+
"main": "src/rule-finder.js",
66
"scripts": {
77
"cover": "nyc --reporter=lcov --reporter=text ava",
88
"test": "ava",
@@ -16,7 +16,7 @@
1616
"report-coverage": "cat ./coverage/lcov.info | node_modules/.bin/codecov"
1717
},
1818
"bin": {
19-
"eslint-find-new-rules": "bin.js"
19+
"eslint-find-new-rules": "src/bin.js"
2020
},
2121
"keywords": [],
2222
"author": "Michał Gołębiowski <[email protected]>",
@@ -78,4 +78,4 @@
7878
"url": "https://github.com/kentcdodds/eslint-find-new-rules/issues"
7979
},
8080
"homepage": "https://github.com/kentcdodds/eslint-find-new-rules#readme"
81-
}
81+
}

bin.js renamed to src/bin.js

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,11 @@
44

55
// Prints rules recognized by ESLint that don't appear in the given config
66
// preset. It helps with upgrading the preset when new ESLint gets released.
7-
var binUtils = require('./bin-utils')
8-
var findNewRules = require('./index')
7+
var getRuleFinder = require('./rule-finder')
8+
var specifiedFile = process.argv[2]
9+
var ruleFinder = getRuleFinder(specifiedFile)
910

10-
var config = binUtils.getConfig(process.argv[2])
11-
var currentRules = binUtils.getCurrentRules(config)
12-
var pluginRules = binUtils.getPluginRules(config)
13-
14-
var newRules = findNewRules(currentRules, pluginRules)
11+
var newRules = ruleFinder.getUnusedRules()
1512

1613
if (newRules.length) {
1714
console.log('New rules to add to the config: ' + newRules.join(', ') + '.') // eslint-disable-line no-console

src/rule-finder.js

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
var path = require('path')
2+
var fs = require('fs')
3+
4+
var eslint = require('eslint')
5+
var isAbsolute = require('path-is-absolute')
6+
var difference = require('lodash.difference')
7+
8+
function _getConfigFile(specifiedFile) {
9+
if (specifiedFile) {
10+
if (isAbsolute(specifiedFile)) {
11+
return specifiedFile
12+
} else {
13+
return path.join(process.cwd(), specifiedFile)
14+
}
15+
} else {
16+
// this is not being called with an arg. Use the package.json `main`
17+
return require(path.join(process.cwd(), 'package.json')).main
18+
}
19+
}
20+
21+
function _getConfig(configFile) {
22+
var cliEngine = new eslint.CLIEngine({
23+
// ignore any config applicable depending on the location on the filesystem
24+
useEslintrc: false,
25+
// point to the particular config
26+
configFile: configFile, // eslint-disable-line object-shorthand
27+
})
28+
return cliEngine.getConfigForFile()
29+
}
30+
31+
function _getCurrentRules(config) {
32+
return Object.keys(config.rules)
33+
}
34+
35+
function _getPluginRules(config) {
36+
var pluginRules = []
37+
var plugins = config.plugins
38+
if (plugins) {
39+
plugins.forEach(function getPluginRule(plugin) {
40+
var pluginConfig = require('eslint-plugin-' + plugin)
41+
var rules = pluginConfig.rules
42+
pluginRules = pluginRules.concat(
43+
Object.keys(rules).map(function normalizePluginRule(rule) {
44+
return plugin + '/' + rule
45+
})
46+
)
47+
})
48+
}
49+
return pluginRules
50+
}
51+
52+
function _getAllAvailableRules(pluginRules) {
53+
var allRules = fs
54+
.readdirSync('./node_modules/eslint/lib/rules')
55+
.map(function removeJsFromFilename(filename) {
56+
return filename.replace(/\.js$/, '')
57+
})
58+
59+
allRules = allRules.concat(pluginRules)
60+
61+
return allRules
62+
}
63+
64+
function RuleFinder(specifiedFile) {
65+
var configFile = _getConfigFile(specifiedFile)
66+
var config = _getConfig(configFile)
67+
var currentRules = _getCurrentRules(config)
68+
var pluginRules = _getPluginRules(config)
69+
var allRules = _getAllAvailableRules(pluginRules)
70+
var unusedRules = difference(allRules, currentRules)
71+
72+
// get all the current rules instead of referring the extended files or documentation
73+
this.getCurrentRules = function getCurrentRules() {
74+
return currentRules
75+
}
76+
77+
// get all the plugin rules instead of referring the extended files or documentation
78+
this.getPluginRules = function getPluginRules() {
79+
return pluginRules
80+
}
81+
82+
// get all the availale rules instead of referring eslint and pluging packages or documentation
83+
this.getAllAvailableRules = function getAllAvailableRules() {
84+
return allRules
85+
}
86+
87+
this.getUnusedRules = function getUnusedRules() {
88+
return unusedRules
89+
}
90+
91+
}
92+
93+
module.exports = function getRuleFinder(specifiedFile) {
94+
return new RuleFinder(specifiedFile)
95+
}

test/bin-utils.js

Lines changed: 0 additions & 84 deletions
This file was deleted.

test/fixtures/.eslintrc.js

Lines changed: 0 additions & 8 deletions
This file was deleted.

test/fixtures/base-config.yml

Lines changed: 0 additions & 5 deletions
This file was deleted.

test/fixtures/eslint.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"extends": "./eslint.yml",
3+
"plugins": [
4+
"react"
5+
]
6+
}

0 commit comments

Comments
 (0)