Skip to content

Commit

Permalink
Merge pull request #27 from sarbbottam/refactor
Browse files Browse the repository at this point in the history
Refactor
  • Loading branch information
ta2edchimp committed Mar 29, 2016
2 parents 40c1513 + bafb885 commit bd40f1b
Show file tree
Hide file tree
Showing 17 changed files with 242 additions and 228 deletions.
23 changes: 22 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ The intended usage is as an npm script:
{
...
"scripts": {
"find-new-rules": "eslint-find-new-rules eslint-config-yourConfigName"
"find-new-rules": "eslint-find-new-rules path/to/eslint-config"
}
...
}
Expand Down Expand Up @@ -65,6 +65,27 @@ It will also default to the `main` in your `package.json`, so you can omit the a
eslint-find-new-rules
```

### As a `require`d module

```
var getRuleFinder = require('./eslint-find-new-rules')
var ruleFinder = getRuleFinder('path/to/eslint-config')
// default to the `main` in your `package.json`
// var ruleFinder = getRuleFinder()
// get all the current, plugin, available and unused rules
// without referring the extended files or documentation
ruleFinder.getCurrentRules()
ruleFinder.getPluginRules()
ruleFinder.getAllAvailableRules()
ruleFinder.getUnusedRules()
```

## Contributors

Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):
Expand Down
68 changes: 0 additions & 68 deletions bin-utils.js

This file was deleted.

19 changes: 0 additions & 19 deletions index.js

This file was deleted.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "eslint-find-new-rules",
"version": "0.0.0-semantically-released",
"description": "Find built-in ESLint rules you don't have in your custom config.",
"main": "index.js",
"main": "src/rule-finder.js",
"scripts": {
"cover": "nyc --reporter=lcov --reporter=text ava",
"test": "ava",
Expand All @@ -16,7 +16,7 @@
"report-coverage": "cat ./coverage/lcov.info | node_modules/.bin/codecov"
},
"bin": {
"eslint-find-new-rules": "bin.js"
"eslint-find-new-rules": "src/bin.js"
},
"keywords": [],
"author": "Michał Gołębiowski <[email protected]>",
Expand Down Expand Up @@ -78,4 +78,4 @@
"url": "https://github.com/kentcdodds/eslint-find-new-rules/issues"
},
"homepage": "https://github.com/kentcdodds/eslint-find-new-rules#readme"
}
}
11 changes: 4 additions & 7 deletions bin.js → src/bin.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,11 @@

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

var config = binUtils.getConfig(process.argv[2])
var currentRules = binUtils.getCurrentRules(config)
var pluginRules = binUtils.getPluginRules(config)

var newRules = findNewRules(currentRules, pluginRules)
var newRules = ruleFinder.getUnusedRules()

if (newRules.length) {
console.log('New rules to add to the config: ' + newRules.join(', ') + '.') // eslint-disable-line no-console
Expand Down
95 changes: 95 additions & 0 deletions src/rule-finder.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
var path = require('path')
var fs = require('fs')

var eslint = require('eslint')
var isAbsolute = require('path-is-absolute')
var difference = require('lodash.difference')

function _getConfigFile(specifiedFile) {
if (specifiedFile) {
if (isAbsolute(specifiedFile)) {
return specifiedFile
} else {
return path.join(process.cwd(), specifiedFile)
}
} else {
// this is not being called with an arg. Use the package.json `main`
return require(path.join(process.cwd(), 'package.json')).main
}
}

function _getConfig(configFile) {
var cliEngine = new eslint.CLIEngine({
// ignore any config applicable depending on the location on the filesystem
useEslintrc: false,
// point to the particular config
configFile: configFile, // eslint-disable-line object-shorthand
})
return cliEngine.getConfigForFile()
}

function _getCurrentRules(config) {
return Object.keys(config.rules)
}

function _getPluginRules(config) {
var pluginRules = []
var plugins = config.plugins
if (plugins) {
plugins.forEach(function getPluginRule(plugin) {
var pluginConfig = require('eslint-plugin-' + plugin)
var rules = pluginConfig.rules
pluginRules = pluginRules.concat(
Object.keys(rules).map(function normalizePluginRule(rule) {
return plugin + '/' + rule
})
)
})
}
return pluginRules
}

function _getAllAvailableRules(pluginRules) {
var allRules = fs
.readdirSync('./node_modules/eslint/lib/rules')
.map(function removeJsFromFilename(filename) {
return filename.replace(/\.js$/, '')
})

allRules = allRules.concat(pluginRules)

return allRules
}

function RuleFinder(specifiedFile) {
var configFile = _getConfigFile(specifiedFile)
var config = _getConfig(configFile)
var currentRules = _getCurrentRules(config)
var pluginRules = _getPluginRules(config)
var allRules = _getAllAvailableRules(pluginRules)
var unusedRules = difference(allRules, currentRules)

// get all the current rules instead of referring the extended files or documentation
this.getCurrentRules = function getCurrentRules() {
return currentRules
}

// get all the plugin rules instead of referring the extended files or documentation
this.getPluginRules = function getPluginRules() {
return pluginRules
}

// get all the availale rules instead of referring eslint and pluging packages or documentation
this.getAllAvailableRules = function getAllAvailableRules() {
return allRules
}

this.getUnusedRules = function getUnusedRules() {
return unusedRules
}

}

module.exports = function getRuleFinder(specifiedFile) {
return new RuleFinder(specifiedFile)
}
84 changes: 0 additions & 84 deletions test/bin-utils.js

This file was deleted.

8 changes: 0 additions & 8 deletions test/fixtures/.eslintrc.js

This file was deleted.

5 changes: 0 additions & 5 deletions test/fixtures/base-config.yml

This file was deleted.

6 changes: 6 additions & 0 deletions test/fixtures/eslint.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"extends": "./eslint.yml",
"plugins": [
"react"
]
}
5 changes: 5 additions & 0 deletions test/fixtures/eslint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
extends:
./eslintrc
rules:
bar-rule:
- 2
5 changes: 5 additions & 0 deletions test/fixtures/eslintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"rules": {
"foo-rule": [2]
}
}
6 changes: 0 additions & 6 deletions test/fixtures/extending-config.json

This file was deleted.

4 changes: 2 additions & 2 deletions test/fixtures/no-path/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module.exports = {
rules: {
'no-alert': [2],
},
'foo-rule': [2]
}
}
Loading

0 comments on commit bd40f1b

Please sign in to comment.