Skip to content

Commit

Permalink
Allow regular expressions for rule no-extraneous-dependencies.
Browse files Browse the repository at this point in the history
  • Loading branch information
knpwrs committed Aug 27, 2016
1 parent 8da6a5a commit d9b9730
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 6 deletions.
21 changes: 15 additions & 6 deletions src/rules/no-extraneous-dependencies.js
Original file line number Diff line number Diff line change
Expand Up @@ -71,18 +71,27 @@ function reportIfMissing(context, deps, depsOptions, node, name) {
context.report(node, missingErrorMessage(packageName))
}

function testConfig(config, filename) {
if (typeof config === 'boolean' || typeof config === 'undefined') {
return config
}
const pattern = new RegExp(config) // `config` is either a string or RegExp
return pattern.test(filename)
}

module.exports = function (context) {
const options = context.options[0] || {}
const filename = context.getFilename()
const deps = getDependencies(context)

if (!deps) {
return {}
}

const depsOptions = {
allowDevDeps: options.devDependencies !== false,
allowOptDeps: options.optionalDependencies !== false,
allowPeerDeps: options.peerDependencies !== false,
allowDevDeps: testConfig(options.devDependencies, filename) !== false,
allowOptDeps: testConfig(options.optionalDependencies, filename) !== false,
allowPeerDeps: testConfig(options.peerDependencies, filename) !== false,
}

// todo: use module visitor from module-utils core
Expand All @@ -102,9 +111,9 @@ module.exports.schema = [
{
'type': 'object',
'properties': {
'devDependencies': { 'type': 'boolean' },
'optionalDependencies': { 'type': 'boolean' },
'peerDependencies': { 'type': 'boolean' },
'devDependencies': { 'type': ['boolean', 'string', 'object'] },
'optionalDependencies': { 'type': ['boolean', 'string', 'object'] },
'peerDependencies': { 'type': ['boolean', 'string', 'object'] },
},
'additionalProperties': false,
},
Expand Down
28 changes: 28 additions & 0 deletions tests/src/rules/no-extraneous-dependencies.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,16 @@ ruleTester.run('no-extraneous-dependencies', rule, {
code: 'import "importType"',
settings: { 'import/resolver': { node: { paths: [ path.join(__dirname, '../../files') ] } } },
}),
test({
code: 'import chai from "chai"',
options: [{devDependencies: /test|spec/}],
filename: 'glob.test.js',
}),
test({
code: 'import chai from "chai"',
options: [{devDependencies: 'test|spec'}],
filename: 'glob.spec.js',
}),
],
invalid: [
test({
Expand Down Expand Up @@ -89,6 +99,24 @@ ruleTester.run('no-extraneous-dependencies', rule, {
message: '\'glob\' should be listed in the project\'s dependencies, not devDependencies.',
}],
}),
test({
code: 'import chai from "chai"',
options: [{devDependencies: /test|spec/}],
filename: 'foo.tes.js',
errors: [{
ruleId: 'no-extraneous-dependencies',
message: '\'chai\' should be listed in the project\'s dependencies, not devDependencies.',
}],
}),
test({
code: 'import chai from "chai"',
options: [{devDependencies: 'test|spec'}],
filename: 'foo.tes.js',
errors: [{
ruleId: 'no-extraneous-dependencies',
message: '\'chai\' should be listed in the project\'s dependencies, not devDependencies.',
}],
}),
test({
code: 'var eslint = require("lodash.isarray")',
options: [{optionalDependencies: false}],
Expand Down

0 comments on commit d9b9730

Please sign in to comment.