Repository: tclindner/npm-package-json-lint
Pull request #14 (2016-05-22 21:06:30)

V1.0.0


Patch:
diff --git a/.eslintrc.json b/.eslintrc.json
index bdd79fb..0261f17 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -20,11 +20,10 @@
     "no-empty-character-class": "error",
     "no-ex-assign": "error",
     "no-extra-boolean-cast": "error",
-    "no-extra-parens": ["error", "all", { "conditionalAssign": false }],
+    "no-extra-parens": ["error", "all", {"conditionalAssign": false}],
     "no-extra-semi": "error",
     "no-func-assign": "error",
-    "no-invalid-regexp": ["error", {
-    "allowConstructorFlags": ["u", "y"]}],
+    "no-invalid-regexp": ["error", {"allowConstructorFlags": ["u", "y"]}],
     "no-irregular-whitespace": "error",
     "no-negated-in-lhs": "error",
     "no-obj-calls": "error",
@@ -114,23 +113,21 @@
     "array-bracket-spacing": ["error", "never"],
     "brace-style": "error",
     "camelcase": "error",
-    "comma-spacing": ["error", { "before": false, "after": true }],
+    "comma-spacing": ["error", {"before": false, "after": true}],
     "comma-style": ["error", "last"],
     "computed-property-spacing": ["error", "never"],
     "eol-last": "error",
     "func-style": ["error", "expression"],
     "id-length": ["error", {"min": 2, "max": 20}],
     "indent": ["error", 2],
-
     "key-spacing": ["error", {"beforeColon": false, "afterColon": true}],
-
     "keyword-spacing": "error",
     "linebreak-style": ["error", "unix"],
     "max-depth": ["error", 4],
     "max-nested-callbacks": ["error", 3],
     "max-params": ["error", 4],
     "max-statements": ["error", 12],
-    "max-statements-per-line": ["error", { "max": 1 }],
+    "max-statements-per-line": ["error", {"max": 1}],
     "new-cap": "error",
     "new-parens": "error",
     "newline-after-var": "error",
@@ -153,7 +150,7 @@
     "object-curly-spacing": ["error", "never"],
     "one-var": ["error", "never"],
     "operator-assignment": ["error", "always"],
-    "padded-blocks": ["error", { "classes": "always" }],
+    "padded-blocks": ["error", {"classes": "always"}],
     "quote-props": ["error", "consistent"],
     "quotes": ["error", "single"],
     "require-jsdoc": ["error", {
@@ -194,7 +191,7 @@
     }],
     "arrow-body-style": ["error", "always"],
     "arrow-parens": ["error", "always"],
-    "arrow-spacing": ["error", { "before": true, "after": true }],
+    "arrow-spacing": ["error", {"before": true, "after": true}],
     "constructor-super": "error",
     "no-class-assign": "error",
     "no-confusing-arrow": ["error", {"allowParens": true}],
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 92ddb96..8c819b7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,14 +11,66 @@ This project adheres to [Semantic Versioning](http://semver.org/).
 
 ### Removed
 
+## [1.0.0] - 2016-05-22
+### Added
+- New rule: [require-bin](https://github.com/tclindner/npm-package-json-lint/wiki/require-bin)
+- New rule: [require-bugs](https://github.com/tclindner/npm-package-json-lint/wiki/require-bugs)
+- New rule: [require-bundledDependencies](https://github.com/tclindner/npm-package-json-lint/wiki/require-bundledDependencies)
+- New rule: [require-config](https://github.com/tclindner/npm-package-json-lint/wiki/require-config)
+- New rule: [require-contributors](https://github.com/tclindner/npm-package-json-lint/wiki/require-contributors)
+- New rule: [require-cpu](https://github.com/tclindner/npm-package-json-lint/wiki/require-cpu)
+- New rule: [require-dependencies](https://github.com/tclindner/npm-package-json-lint/wiki/require-dependencies)
+- New rule: [require-devDependencies](https://github.com/tclindner/npm-package-json-lint/wiki/require-devDependencies)
+- New rule: [require-directories](https://github.com/tclindner/npm-package-json-lint/wiki/require-directories)
+- New rule: [require-files](https://github.com/tclindner/npm-package-json-lint/wiki/require-files)
+- New rule: [require-homepage](https://github.com/tclindner/npm-package-json-lint/wiki/require-homepage)
+- New rule: [require-main](https://github.com/tclindner/npm-package-json-lint/wiki/require-main)
+- New rule: [require-man](https://github.com/tclindner/npm-package-json-lint/wiki/require-man)
+- New rule: [require-optionalDependencies](https://github.com/tclindner/npm-package-json-lint/wiki/require-optionalDependencies)
+- New rule: [require-os](https://github.com/tclindner/npm-package-json-lint/wiki/require-os)
+- New rule: [require-peerDependencies](https://github.com/tclindner/npm-package-json-lint/wiki/require-peerDependencies)
+- New rule: [require-preferGlobal](https://github.com/tclindner/npm-package-json-lint/wiki/require-preferGlobal)
+- New rule: [require-private](https://github.com/tclindner/npm-package-json-lint/wiki/require-private)
+- New rule: [require-publishConfig](https://github.com/tclindner/npm-package-json-lint/wiki/require-publishConfig)
+- New rule: [require-repository](https://github.com/tclindner/npm-package-json-lint/wiki/require-repository)
+- New rule: [require-scripts](https://github.com/tclindner/npm-package-json-lint/wiki/require-scripts)
+- New rule: [os-type](https://github.com/tclindner/npm-package-json-lint/wiki/os-type)
+- New rule: [cpu-type](https://github.com/tclindner/npm-package-json-lint/wiki/cpu-type)
+- New rule: [optionalDependencies-type](https://github.com/tclindner/npm-package-json-lint/wiki/optionalDependencies-type)
+- New rule: [peerDependencies-type](https://github.com/tclindner/npm-package-json-lint/wiki/peerDependencies-type)
+- New rule: [bundledDependencies-type](https://github.com/tclindner/npm-package-json-lint/wiki/bundledDependencies-type)
+- Ability to specify whether a rule should be an error or a warning
+- Defaults now only include "type" rules and rules for name/version
+
+### Changed
+- Renamed `author-required` to `require-author`
+- Renamed `description-required` to `require-description`
+- Renamed `engines-required` to `require-engines`
+- Renamed `license-required` to `require-license`
+- Renamed `name-required` to `require-name`
+- Renamed `repository-required` to `require-repository`
+- Renamed `version-required` to `require-version`
+- Renamed `bugs-recommended` to `require-bugs`
+- Renamed `homepage-recommended` to `require-homepage`
+- Renamed `keywords-recommended` to `require-keywords`
+- Renamed `author-valid-values` to `valid-values-author`
+- Renamed `private-valid-values` to `valid-values-private`
+- Renamed `dependencies-invalid-dependencies` to `no-restricted-dependencies`
+- Renamed `dependencies-invalid-pre-release-dependencies` to `no-restricted-pre-release-dependencies`
+- Renamed `devDependencies-invalid-dependencies` to `no-restricted-devDependencies`
+- Renamed `devDependencies-invalid-pre-release-dependencies` to `no-restricted-pre-release-devDependencies`
+
+### Fixed
+- Updated `man-type` to account for both settings, array and string
+
 ## [0.4.0] - 2016-05-13
 ### Added
-- New rule: prefer-caret-version-dependencies
-- New rule: prefer-tilde-version-dependencies
-- New rule: prefer-caret-version-devDependencies
-- New rule: prefer-tilde-version-devDependencies
-- New rule: prefer-no-version-zero-dependencies
-- New rule: prefer-no-version-zero-devDependencies
+- New rule: [prefer-caret-version-dependencies](https://github.com/tclindner/npm-package-json-lint/wiki/prefer-caret-version-dependencies)
+- New rule: [prefer-tilde-version-dependencies](https://github.com/tclindner/npm-package-json-lint/wiki/prefer-tilde-version-dependencies)
+- New rule: [prefer-caret-version-devDependencies](https://github.com/tclindner/npm-package-json-lint/wiki/prefer-caret-version-devDependencies)
+- New rule: [prefer-tilde-version-devDependencies](https://github.com/tclindner/npm-package-json-lint/wiki/prefer-tilde-version-devDependencies)
+- New rule: [prefer-no-version-zero-dependencies](https://github.com/tclindner/npm-package-json-lint/wiki/prefer-no-version-zero-dependencies)
+- New rule: [prefer-no-version-zero-devDependencies](https://github.com/tclindner/npm-package-json-lint/wiki/prefer-no-version-zero-devDependencies)
 
 ### Changed
 - Update to single quotes (ESLint rule: quotes)
diff --git a/README.md b/README.md
index 4465ae3..643f4b2 100755
--- a/README.md
+++ b/README.md
@@ -20,6 +20,9 @@ Currently it can check for:
 * whether a version number is a valid
 * the presence of a given module
 * the presence of a pre-release version of a module
+* and much more!
+
+Please see the [wiki](https://github.com/tclindner/npm-package-json-lint/wiki) for a list of rules.
 
 ## How do I install it?
 
@@ -50,10 +53,10 @@ First thing first, let's make sure you have the necessary pre-requisites.
 ### Examples
 
 Run a specific rule, author-valid-values, on a file relative to the current working directory.
-`pjl-cli -f "../relative-path/package.json" -r "author-valid-values: true"`
+`pjl-cli -f "../relative-path/package.json" -r "require-author: 'error'"`
 
 Run a specific rule, author-valid-values, ignoring warnings on a file relative to the current working directory.
-`pjl-cli -f "../relative-path/package.json" -r "author-valid-values: true" --ignore-warnings`
+`pjl-cli -f "../relative-path/package.json" -r "require-author: 'error'" --ignore-warnings`
 
 Run using the config in `.npmpackagejsonlintrc` on a file relative to the current working directory.
 `pjl-cli -f "../relative-path/package.json" -c "./.npmpackagejsonlintrc"`
@@ -63,15 +66,29 @@ Run using the default config on a file relative to the current working directory
 
 ## Lint Rules
 
-npm-package-json-lint has a configurable set of rules. Please see the [wiki](https://github.com/tclindner/npm-package-json-lint/wiki) for a list of available rules configuration instructions. Each rule contains the following properties:
+npm-package-json-lint has a configurable set of rules. Please see the [wiki](https://github.com/tclindner/npm-package-json-lint/wiki) for a full list of available rules. By [default](src/defaultConfig.js) only type checks and name/version rules are enforced. This is the bare minimum configuration.
+
+Each rule contains the following properties:
+
+  1. ID - example: require-author
+  2. Node - example: author
+  3. Message - example: author is required
+  4. Rule Type - example: required
+
+As mentioned in the "Commands and configuration" section there are two ways to specify rule sets. The first is using `--rule` to specify a given rule. This will run npm-package-json-lint with just this rule. The second is using `--rules-file` to specify a JSON file, named [`.npmpackagejsonlintrc`](https://github.com/tclindner/npm-package-json-lint/wiki/npm-package-json-lint-rc), to run a set of rules. If neither of the options above are specified then npm-package-json-lint looks for a global [`.npmpackagejsonlintrc`](https://github.com/tclindner/npm-package-json-lint/wiki/npm-package-json-lint-rc) file in the root of your user directory. Finally, if a global [`.npmpackagejsonlintrc`](https://github.com/tclindner/npm-package-json-lint/wiki/npm-package-json-lint-rc) file doesn't exist then the [defaults](src/defaultConfig.js) are used.
+
+### Configuring rules
+
+npm-package-json-lint rules can either be run as an `error` or a `warning`.
 
-  1. ID - example: author-required
-  2. Type - error or warning
-  3. Node - example: author
-  4. Message - example: author is required
-  5. Rule Type - example: required
+* "warning" - run the rule as a warning
+* "error" - run the rule as an error
 
-As mentioned in the "Commands and configuration" section there are two ways to specify rule sets. The first is using `--rule` to specify a given rule. This will run package json lint with just this rule. The second is using `--rules-file` to specify a JSON file, named [`.npmpackagejsonlintrc`](https://github.com/tclindner/npm-package-json-lint/wiki/npm-package-json-lint-rc), to run a set of rules. If neither of the options above are specified then package json lint looks for a global [`.npmpackagejsonlintrc`](https://github.com/tclindner/npm-package-json-lint/wiki/npm-package-json-lint-rc) file in the root of your user directory. Finally, if a global [`.npmpackagejsonlintrc`](https://github.com/tclindner/npm-package-json-lint/wiki/npm-package-json-lint-rc) file doesn't exist then all rules are enabled by [default](src/defaultConfig.js).
+Ex: `"require-author": "error"`
+
+## Migrating from v0.x.x to 1.x.x
+
+Please see [CONTRIBUTING.md](CONTRIBUTING.md).
 
 ## Contributing
 
@@ -81,6 +98,10 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md).
 
 Please see [CHANGELOG.md](CHANGELOG.md).
 
+## Related
+
+* [grunt-npm-package-json-lint](grunt-npm-package-json-lint): Grunt Wrapper for npm-package-json-lint
+
 ## License
 
 Copyright (c) 2016 Thomas Lindner. Licensed under the MIT license.
diff --git a/package.json b/package.json
index a896a1e..7f4c087 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "npm-package-json-lint",
-  "version": "0.4.0",
+  "version": "1.0.0",
   "description": "CLI app for linting package.json files.",
   "keywords": [
     "lint",
diff --git a/src/Config.js b/src/Config.js
index e604d07..72202a9 100755
--- a/src/Config.js
+++ b/src/Config.js
@@ -1,5 +1,7 @@
 'use strict';
 
+const inArray = require('in-array');
+const isPlainObj = require('is-plain-obj');
 const Parser = require('./Parser');
 const path = require('path');
 
@@ -10,6 +12,17 @@ class Config {
    * @param  {Object|String} passedConfigParam Object or string with desired configuration
    */
   constructor(passedConfigParam) {
+    this.arrayRules = [
+      'valid-values-author',
+      'valid-values-private',
+      'no-restricted-dependencies',
+      'no-restricted-devDependencies',
+      'no-restricted-pre-release-dependencies',
+      'no-restricted-pre-release-devDependencies'
+    ];
+    this.firstKey = 0;
+    this.secondKey = 1;
+
     if (this._isConfigPassed(passedConfigParam)) {
       const passedConfig = this._getPassedConfig(passedConfigParam);
 
@@ -53,12 +66,41 @@ class Config {
         configFile = path.join(__dirname, passedConfig);
       }
 
-      return parser.parse(configFile);
+      const rcFileObj = parser.parse(configFile);
+
+      this._validateConfig(rcFileObj);
+
+      return rcFileObj;
     }
 
     return passedConfig;
   }
 
+  /**
+   * Validates config file
+   * @param  {Object}     rcFileObj   Object version of .npmpackagejsonlintrc file
+   * @return {boolean}                True if validate config is successful
+   */
+  _validateConfig(rcFileObj) {
+    for (const rule in rcFileObj) {
+      const ruleConfig = rcFileObj[rule];
+
+      if (Array.isArray(ruleConfig) && inArray(this.arrayRules, rule)) {
+        if (typeof ruleConfig[this.firstKey] !== 'string' || typeof ruleConfig[this.firstKey] === 'string' && ruleConfig[this.firstKey] !== 'error' && ruleConfig[this.firstKey] !== 'warning') {
+          throw new Error(`${rule} - first key must be set to "error" or "warning". Currently set to ${ruleConfig[this.firstKey]}`);
+        }
+
+        if (!Array.isArray(ruleConfig[this.secondKey])) {
+          throw new Error(`${rule} - second key must be set an array. Currently set to ${ruleConfig[this.secondKey]}`);
+        }
+      } else if (typeof ruleConfig !== 'string' || typeof ruleConfig === 'string' && ruleConfig !== 'error' && ruleConfig !== 'warning') {
+        throw new Error(`${rule} - must be set to "error" or "warning". Currently set to ${ruleConfig}`);
+      }
+    }
+
+    return true;
+  }
+
 }
 
 module.exports = Config;
diff --git a/src/NpmPackageJsonLint.js b/src/NpmPackageJsonLint.js
index bec179e..f176e38 100755
--- a/src/NpmPackageJsonLint.js
+++ b/src/NpmPackageJsonLint.js
@@ -17,7 +17,9 @@ class NpmPackageJsonLint {
   constructor(packageJsonData, config, options) {
     this.packageJsonData = packageJsonData;
     this.ignoreWarnings = options.ignoreWarnings;
-    this.arrayRuleTypes = ['valid-values', 'invalid-dependencies', 'invalid-pre-release-dependencies'];
+    this.arrayRuleTypes = ['valid-values', 'no-restricted-dependencies', 'no-restricted-pre-release-dependencies'];
+    this.firstKey = 0;
+    this.secondKey = 1;
     this.errors = [];
     this.warnings = [];
 
@@ -32,19 +34,20 @@ class NpmPackageJsonLint {
    * @return {Object} Results object
    */
   lint() {
-    for (const configItem in this.config) {
-      const configItemValue = this.config[configItem];
-      const ruleModule = this.rules.get(configItem);
+    for (const rule in this.config) {
+      const ruleModule = this.rules.get(rule);
 
       if (inArray(this.arrayRuleTypes, ruleModule.ruleType)) {
-        const lintResult = ruleModule.lint(this.packageJsonData, configItemValue);
+        const errorWarningSetting = this.config[rule][this.firstKey];
+        const ruleConfigArray = this.config[rule][this.secondKey];
+        const lintResult = ruleModule.lint(this.packageJsonData, errorWarningSetting, ruleConfigArray);
 
-        this._processResult(lintResult, ruleModule.lintType);
-      } else if (configItemValue) {
-        // else all other rules either have a true or false flag if they are enabled
-        const lintResult = ruleModule.lint(this.packageJsonData);
+        this._processResult(lintResult, errorWarningSetting);
+      } else {
+        const errorWarningSetting = this.config[rule];
+        const lintResult = ruleModule.lint(this.packageJsonData, errorWarningSetting);
 
-        this._processResult(lintResult, ruleModule.lintType);
+        this._processResult(lintResult, errorWarningSetting);
       }
     }
 
diff --git a/src/Rules.js b/src/Rules.js
index d3ca898..48b9da8 100755
--- a/src/Rules.js
+++ b/src/Rules.js
@@ -23,8 +23,10 @@ class Rules {
       fs.readdirSync(rulesDirectory).forEach((file) => {
         const beginIndex = 0;
         const endIndex = -3;
+        const ruleId = file.slice(beginIndex, endIndex);
+        const ruleModule = path.join(rulesDirectory, file);
 
-        this.rules[file.slice(beginIndex, endIndex)] = path.join(rulesDirectory, file);
+        this._registerRule(ruleId, ruleModule);
       });
 
       return this.rules;
diff --git a/src/defaultConfig.js b/src/defaultConfig.js
index 057fdb6..e8bb130 100755
--- a/src/defaultConfig.js
+++ b/src/defaultConfig.js
@@ -1,37 +1,33 @@
 'use strict';
 
 const defaultConfig = {
-  'author-required': true,
-  'bin-type': true,
-  'bugs-recommended': true,
-  'config-type': true,
-  'dependencies-type': true,
-  'description-required': true,
-  'description-type': true,
-  'devDependencies-type': true,
-  'directories-type': true,
-  'engines-required': true,
-  'engines-type': true,
-  'files-type': true,
-  'homepage-recommended': true,
-  'homepage-type': true,
-  'keywords-recommended': true,
-  'keywords-type': true,
-  'license-required': true,
-  'license-type': true,
-  'main-type': true,
-  'man-type': true,
-  'name-format': true,
-  'name-required': true,
-  'name-type': true,
-  'preferGlobal-type': true,
-  'private-type': true,
-  'repository-required': true,
-  'repository-type': true,
-  'scripts-type': true,
-  'version-format': true,
-  'version-required': true,
-  'version-type': true
+  'require-name': 'error',
+  'require-version': 'error',
+  'name-format': 'error',
+  'version-format': 'error',
+  'bin-type': 'error',
+  'config-type': 'error',
+  'cpu-type': 'error',
+  'dependencies-type': 'error',
+  'description-type': 'error',
+  'devDependencies-type': 'error',
+  'directories-type': 'error',
+  'engines-type': 'error',
+  'files-type': 'error',
+  'homepage-type': 'error',
+  'keywords-type': 'error',
+  'license-type': 'error',
+  'main-type': 'error',
+  'man-type': 'error',
+  'name-type': 'error',
+  'optionalDependencies-type': 'error',
+  'os-type': 'error',
+  'peerDependencies-type': 'error',
+  'preferGlobal-type': 'error',
+  'private-type': 'error',
+  'repository-type': 'error',
+  'scripts-type': 'error',
+  'version-type': 'error'
 };
 
 module.exports = defaultConfig;
diff --git a/src/rules/bin-type.js b/src/rules/bin-type.js
index e8cc303..89b66e1 100755
--- a/src/rules/bin-type.js
+++ b/src/rules/bin-type.js
@@ -4,12 +4,11 @@ const isObject = require('./../validators/type').isObject;
 const isString = require('./../validators/type').isString;
 const LintIssue = require('./../LintIssue');
 const lintId = 'bin-type';
-const lintType = 'error';
 const nodeName = 'bin';
 const message = 'Type should be either a string or an Object';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isString(packageJsonData, nodeName) && !isObject(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -18,5 +17,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/bugs-recommended.js b/src/rules/bugs-recommended.js
deleted file mode 100755
index cd36133..0000000
--- a/src/rules/bugs-recommended.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-
-const LintIssue = require('./../LintIssue');
-const lintId = 'bugs-recommended';
-const lintType = 'warning';
-const nodeName = 'bugs';
-const message = 'bugs is recommended';
-const ruleType = 'recommended';
-
-const lint = function(packageJsonData) {
-  if (!packageJsonData.hasOwnProperty(nodeName)) {
-    return new LintIssue(lintId, lintType, nodeName, message);
-  }
-
-  return true;
-};
-
-module.exports.lint = lint;
-module.exports.lintType = lintType;
-module.exports.ruleType = ruleType;
diff --git a/src/rules/bundledDependencies-type.js b/src/rules/bundledDependencies-type.js
new file mode 100644
index 0000000..15ac46b
--- /dev/null
+++ b/src/rules/bundledDependencies-type.js
@@ -0,0 +1,19 @@
+'use strict';
+
+const isObject = require('./../validators/type').isObject;
+const LintIssue = require('./../LintIssue');
+const lintId = 'bundledDependencies-type';
+const nodeName = 'bundledDependencies';
+const message = 'Type should be an Object';
+const ruleType = 'type';
+
+const lint = function(packageJsonData, lintType) {
+  if (!isObject(packageJsonData, nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/config-type.js b/src/rules/config-type.js
index 5ebb910..16b078c 100755
--- a/src/rules/config-type.js
+++ b/src/rules/config-type.js
@@ -3,12 +3,11 @@
 const isObject = require('./../validators/type').isObject;
 const LintIssue = require('./../LintIssue');
 const lintId = 'config-type';
-const lintType = 'error';
 const nodeName = 'config';
 const message = 'Type should be an Object';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isObject(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/cpu-type.js b/src/rules/cpu-type.js
new file mode 100644
index 0000000..31ec93a
--- /dev/null
+++ b/src/rules/cpu-type.js
@@ -0,0 +1,19 @@
+'use strict';
+
+const isArray = require('./../validators/type').isArray;
+const LintIssue = require('./../LintIssue');
+const lintId = 'os-type';
+const nodeName = 'os';
+const message = 'Type should be an array';
+const ruleType = 'type';
+
+const lint = function(packageJsonData, lintType) {
+  if (!isArray(packageJsonData, nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/dependencies-type.js b/src/rules/dependencies-type.js
index 03a2d8d..fca70d9 100755
--- a/src/rules/dependencies-type.js
+++ b/src/rules/dependencies-type.js
@@ -3,11 +3,11 @@
 const isObject = require('./../validators/type').isObject;
 const LintIssue = require('./../LintIssue');
 const lintId = 'dependencies-type';
-const lintType = 'error';
 const nodeName = 'dependencies';
 const message = 'Type should be an Object';
+const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isObject(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -16,4 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/description-type.js b/src/rules/description-type.js
index 82908dd..258b84d 100755
--- a/src/rules/description-type.js
+++ b/src/rules/description-type.js
@@ -3,12 +3,11 @@
 const LintIssue = require('./../LintIssue');
 const isString = require('./../validators/type').isString;
 const lintId = 'description-type';
-const lintType = 'error';
 const nodeName = 'description';
 const message = 'Type should be a string';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isString(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/devDependencies-type.js b/src/rules/devDependencies-type.js
index 7114700..b1880f9 100755
--- a/src/rules/devDependencies-type.js
+++ b/src/rules/devDependencies-type.js
@@ -3,12 +3,11 @@
 const isObject = require('./../validators/type').isObject;
 const LintIssue = require('./../LintIssue');
 const lintId = 'devDependencies-type';
-const lintType = 'error';
 const nodeName = 'devDependencies';
 const message = 'Type should be an Object';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isObject(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/directories-type.js b/src/rules/directories-type.js
index 3d739b9..91c24f3 100755
--- a/src/rules/directories-type.js
+++ b/src/rules/directories-type.js
@@ -3,12 +3,11 @@
 const isObject = require('./../validators/type').isObject;
 const LintIssue = require('./../LintIssue');
 const lintId = 'directories-type';
-const lintType = 'error';
 const nodeName = 'directories';
 const message = 'Type should be an Object';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isObject(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/engines-type.js b/src/rules/engines-type.js
index e82d913..a99019f 100755
--- a/src/rules/engines-type.js
+++ b/src/rules/engines-type.js
@@ -3,12 +3,11 @@
 const isObject = require('./../validators/type').isObject;
 const LintIssue = require('./../LintIssue');
 const lintId = 'engines-type';
-const lintType = 'error';
 const nodeName = 'engines';
 const message = 'Type should be an Object';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isObject(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/files-type.js b/src/rules/files-type.js
index 0b41f59..b410a28 100755
--- a/src/rules/files-type.js
+++ b/src/rules/files-type.js
@@ -3,12 +3,11 @@
 const isArray = require('./../validators/type').isArray;
 const LintIssue = require('./../LintIssue');
 const lintId = 'files-type';
-const lintType = 'error';
 const nodeName = 'files';
 const message = 'Type should be an Array';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isArray(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/homepage-recommended.js b/src/rules/homepage-recommended.js
deleted file mode 100755
index fb2b471..0000000
--- a/src/rules/homepage-recommended.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-
-const LintIssue = require('./../LintIssue');
-const lintId = 'homepage-recommended';
-const lintType = 'warning';
-const nodeName = 'homepage';
-const message = 'homepage is recommended';
-const ruleType = 'recommended';
-
-const lint = function(packageJsonData) {
-  if (!packageJsonData.hasOwnProperty(nodeName)) {
-    return new LintIssue(lintId, lintType, nodeName, message);
-  }
-
-  return true;
-};
-
-module.exports.lint = lint;
-module.exports.lintType = lintType;
-module.exports.ruleType = ruleType;
diff --git a/src/rules/homepage-type.js b/src/rules/homepage-type.js
index 991196f..2e34817 100755
--- a/src/rules/homepage-type.js
+++ b/src/rules/homepage-type.js
@@ -3,12 +3,11 @@
 const LintIssue = require('./../LintIssue');
 const isString = require('./../validators/type').isString;
 const lintId = 'homepage-type';
-const lintType = 'error';
 const nodeName = 'homepage';
 const message = 'Type should be a string';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isString(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/keywords-recommended.js b/src/rules/keywords-recommended.js
deleted file mode 100755
index 745c907..0000000
--- a/src/rules/keywords-recommended.js
+++ /dev/null
@@ -1,20 +0,0 @@
-'use strict';
-
-const LintIssue = require('./../LintIssue');
-const lintId = 'keywords-recommended';
-const lintType = 'warning';
-const nodeName = 'keywords';
-const message = 'keywords is recommended';
-const ruleType = 'recommended';
-
-const lint = function(packageJsonData) {
-  if (!packageJsonData.hasOwnProperty(nodeName)) {
-    return new LintIssue(lintId, lintType, nodeName, message);
-  }
-
-  return true;
-};
-
-module.exports.lint = lint;
-module.exports.lintType = lintType;
-module.exports.ruleType = ruleType;
diff --git a/src/rules/keywords-type.js b/src/rules/keywords-type.js
index 1cb2848..d85a79b 100755
--- a/src/rules/keywords-type.js
+++ b/src/rules/keywords-type.js
@@ -3,12 +3,11 @@
 const isArray = require('./../validators/type').isArray;
 const LintIssue = require('./../LintIssue');
 const lintId = 'keywords-type';
-const lintType = 'error';
 const nodeName = 'keywords';
 const message = 'Type should be an Array';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isArray(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/license-type.js b/src/rules/license-type.js
index d0ecafc..5f24e16 100755
--- a/src/rules/license-type.js
+++ b/src/rules/license-type.js
@@ -3,12 +3,11 @@
 const isString = require('./../validators/type').isString;
 const LintIssue = require('./../LintIssue');
 const lintId = 'license-type';
-const lintType = 'error';
 const nodeName = 'license';
 const message = 'Type should be a string';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isString(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/main-type.js b/src/rules/main-type.js
index 2537dad..896322b 100755
--- a/src/rules/main-type.js
+++ b/src/rules/main-type.js
@@ -3,12 +3,11 @@
 const isString = require('./../validators/type').isString;
 const LintIssue = require('./../LintIssue');
 const lintId = 'main-type';
-const lintType = 'error';
 const nodeName = 'main';
 const message = 'Type should be a string';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isString(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,4 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/man-type.js b/src/rules/man-type.js
index 8ee98cd..1117b89 100755
--- a/src/rules/man-type.js
+++ b/src/rules/man-type.js
@@ -1,15 +1,15 @@
 'use strict';
 
-const isObject = require('./../validators/type').isObject;
+const isArray = require('./../validators/type').isArray;
+const isString = require('./../validators/type').isString;
 const LintIssue = require('./../LintIssue');
 const lintId = 'man-type';
-const lintType = 'error';
 const nodeName = 'man';
-const message = 'Type should be an Object';
+const message = 'Type should be either a string or an array';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
-  if (!isObject(packageJsonData, nodeName)) {
+const lint = function(packageJsonData, lintType) {
+  if (!isArray(packageJsonData, nodeName) && !isString(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
 
@@ -17,5 +17,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/name-format.js b/src/rules/name-format.js
index 4e46d52..4a9ad76 100755
--- a/src/rules/name-format.js
+++ b/src/rules/name-format.js
@@ -3,12 +3,11 @@
 const isLowercase = require('./../validators/format').isLowercase;
 const LintIssue = require('./../LintIssue');
 const lintId = 'name-format';
-const lintType = 'error';
 const nodeName = 'name';
 const message = 'Format should be all lowercase';
 const ruleType = 'format';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isLowercase(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/name-type.js b/src/rules/name-type.js
index c6d7022..dea916a 100755
--- a/src/rules/name-type.js
+++ b/src/rules/name-type.js
@@ -3,12 +3,11 @@
 const LintIssue = require('./../LintIssue');
 const isString = require('./../validators/type').isString;
 const lintId = 'name-type';
-const lintType = 'error';
 const nodeName = 'name';
 const message = 'Type should be a string';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isString(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/dependencies-invalid-dependencies.js b/src/rules/no-restricted-dependencies.js
similarity index 57%
rename from src/rules/dependencies-invalid-dependencies.js
rename to src/rules/no-restricted-dependencies.js
index 3939b95..bcefffe 100755
--- a/src/rules/dependencies-invalid-dependencies.js
+++ b/src/rules/no-restricted-dependencies.js
@@ -2,13 +2,12 @@
 
 const hasDependency = require('./../validators/dependency-audit').hasDependency;
 const LintIssue = require('./../LintIssue');
-const lintId = 'dependencies-invalid-dependencies';
-const lintType = 'error';
+const lintId = 'no-restricted-dependencies';
 const nodeName = 'dependencies';
-const message = 'You are using an invalid dependency. Please remove it.';
-const ruleType = 'invalid-dependencies';
+const message = 'You are using a restricted dependency. Please remove it.';
+const ruleType = 'no-restricted-dependencies';
 
-const lint = function(packageJsonData, invalidDependencies) {
+const lint = function(packageJsonData, lintType, invalidDependencies) {
   if (hasDependency(packageJsonData, nodeName, invalidDependencies)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData, invalidDependencies) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/devDependencies-invalid-dependencies.js b/src/rules/no-restricted-devDependencies.js
similarity index 57%
rename from src/rules/devDependencies-invalid-dependencies.js
rename to src/rules/no-restricted-devDependencies.js
index 9bb3be1..708ebf1 100755
--- a/src/rules/devDependencies-invalid-dependencies.js
+++ b/src/rules/no-restricted-devDependencies.js
@@ -2,13 +2,12 @@
 
 const hasDependency = require('./../validators/dependency-audit').hasDependency;
 const LintIssue = require('./../LintIssue');
-const lintId = 'devDependencies-invalid-dependencies';
-const lintType = 'error';
+const lintId = 'no-restricted-devDependencies';
 const nodeName = 'devDependencies';
-const message = 'You are using an invalid dependency. Please remove it.';
-const ruleType = 'invalid-dependencies';
+const message = 'You are using a restricted dependency. Please remove it.';
+const ruleType = 'no-restricted-dependencies';
 
-const lint = function(packageJsonData, invalidDependencies) {
+const lint = function(packageJsonData, lintType, invalidDependencies) {
   if (hasDependency(packageJsonData, nodeName, invalidDependencies)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData, invalidDependencies) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/dependencies-invalid-pre-release-dependencies.js b/src/rules/no-restricted-pre-release-dependencies.js
similarity index 56%
rename from src/rules/dependencies-invalid-pre-release-dependencies.js
rename to src/rules/no-restricted-pre-release-dependencies.js
index 53c22fc..b27f2c7 100755
--- a/src/rules/dependencies-invalid-pre-release-dependencies.js
+++ b/src/rules/no-restricted-pre-release-dependencies.js
@@ -2,13 +2,12 @@
 
 const hasDepPrereleaseVers = require('./../validators/dependency-audit').hasDepPrereleaseVers;
 const LintIssue = require('./../LintIssue');
-const lintId = 'dependencies-invalid-pre-release-dependencies';
-const lintType = 'error';
+const lintId = 'no-restricted-pre-release-dependencies';
 const nodeName = 'dependencies';
-const message = 'You are using an invalid pre-release dependency. Please remove it.';
-const ruleType = 'invalid-pre-release-dependencies';
+const message = 'You are using a restricted pre-release dependency. Please remove it.';
+const ruleType = 'no-restricted-pre-release-dependencies';
 
-const lint = function(packageJsonData, invalidPreRelDeps) {
+const lint = function(packageJsonData, lintType, invalidPreRelDeps) {
   if (hasDepPrereleaseVers(packageJsonData, nodeName, invalidPreRelDeps)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData, invalidPreRelDeps) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/devDependencies-invalid-pre-release-dependencies.js b/src/rules/no-restricted-pre-release-devDependencies.js
similarity index 56%
rename from src/rules/devDependencies-invalid-pre-release-dependencies.js
rename to src/rules/no-restricted-pre-release-devDependencies.js
index 36c64ab..20abd3d 100755
--- a/src/rules/devDependencies-invalid-pre-release-dependencies.js
+++ b/src/rules/no-restricted-pre-release-devDependencies.js
@@ -2,13 +2,12 @@
 
 const hasDepPrereleaseVers = require('./../validators/dependency-audit').hasDepPrereleaseVers;
 const LintIssue = require('./../LintIssue');
-const lintId = 'devDependencies-invalid-pre-release-dependencies';
-const lintType = 'error';
+const lintId = 'no-restricted-pre-release-devDependencies';
 const nodeName = 'devDependencies';
-const message = 'You are using an invalid pre-release dependency. Please remove it.';
-const ruleType = 'invalid-pre-release-dependencies';
+const message = 'You are using a restricted pre-release dependency. Please remove it.';
+const ruleType = 'no-restricted-pre-release-dependencies';
 
-const lint = function(packageJsonData, invalidPreRelDeps) {
+const lint = function(packageJsonData, lintType, invalidPreRelDeps) {
   if (hasDepPrereleaseVers(packageJsonData, nodeName, invalidPreRelDeps)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData, invalidPreRelDeps) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/optionalDependencies-type.js b/src/rules/optionalDependencies-type.js
new file mode 100644
index 0000000..f43240d
--- /dev/null
+++ b/src/rules/optionalDependencies-type.js
@@ -0,0 +1,19 @@
+'use strict';
+
+const isObject = require('./../validators/type').isObject;
+const LintIssue = require('./../LintIssue');
+const lintId = 'optionalDependencies-type';
+const nodeName = 'optionalDependencies';
+const message = 'Type should be an Object';
+const ruleType = 'type';
+
+const lint = function(packageJsonData, lintType) {
+  if (!isObject(packageJsonData, nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/os-type.js b/src/rules/os-type.js
new file mode 100644
index 0000000..31ec93a
--- /dev/null
+++ b/src/rules/os-type.js
@@ -0,0 +1,19 @@
+'use strict';
+
+const isArray = require('./../validators/type').isArray;
+const LintIssue = require('./../LintIssue');
+const lintId = 'os-type';
+const nodeName = 'os';
+const message = 'Type should be an array';
+const ruleType = 'type';
+
+const lint = function(packageJsonData, lintType) {
+  if (!isArray(packageJsonData, nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/peerDependencies-type.js b/src/rules/peerDependencies-type.js
new file mode 100644
index 0000000..a68e7fa
--- /dev/null
+++ b/src/rules/peerDependencies-type.js
@@ -0,0 +1,19 @@
+'use strict';
+
+const isObject = require('./../validators/type').isObject;
+const LintIssue = require('./../LintIssue');
+const lintId = 'peerDependencies-type';
+const nodeName = 'peerDependencies';
+const message = 'Type should be an Object';
+const ruleType = 'type';
+
+const lint = function(packageJsonData, lintType) {
+  if (!isObject(packageJsonData, nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/prefer-caret-version-dependencies.js b/src/rules/prefer-caret-version-dependencies.js
index 2f7f083..7249a34 100644
--- a/src/rules/prefer-caret-version-dependencies.js
+++ b/src/rules/prefer-caret-version-dependencies.js
@@ -3,12 +3,11 @@
 const areVersRangesValid = require('./../validators/dependency-audit').areVersRangesValid;
 const LintIssue = require('./../LintIssue');
 const lintId = 'prefer-caret-version-dependencies';
-const lintType = 'error';
 const nodeName = 'dependencies';
 const message = 'You are using an invalid version range. Please use ^.';
 const ruleType = 'dependencies-version-range';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   const rangeSpecifier = '^';
 
   if (!areVersRangesValid(packageJsonData, nodeName, rangeSpecifier)) {
@@ -19,5 +18,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/prefer-caret-version-devDependencies.js b/src/rules/prefer-caret-version-devDependencies.js
index ca6eca3..c4489c7 100644
--- a/src/rules/prefer-caret-version-devDependencies.js
+++ b/src/rules/prefer-caret-version-devDependencies.js
@@ -3,12 +3,11 @@
 const areVersRangesValid = require('./../validators/dependency-audit').areVersRangesValid;
 const LintIssue = require('./../LintIssue');
 const lintId = 'prefer-caret-version-devDependencies';
-const lintType = 'error';
 const nodeName = 'devDependencies';
 const message = 'You are using an invalid version range. Please use ^.';
 const ruleType = 'devDependencies-version-range';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   const rangeSpecifier = '^';
 
   if (!areVersRangesValid(packageJsonData, nodeName, rangeSpecifier)) {
@@ -19,5 +18,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/prefer-no-version-zero-dependencies.js b/src/rules/prefer-no-version-zero-dependencies.js
index 587e9e2..7d1af5e 100644
--- a/src/rules/prefer-no-version-zero-dependencies.js
+++ b/src/rules/prefer-no-version-zero-dependencies.js
@@ -3,12 +3,11 @@
 const hasDepVersZero = require('./../validators/dependency-audit').hasDepVersZero;
 const LintIssue = require('./../LintIssue');
 const lintId = 'prefer-no-version-zero-dependencies';
-const lintType = 'error';
 const nodeName = 'dependencies';
 const message = 'You have invalid version 0 dependencies. Please use modules with a major version >= 1.';
 const ruleType = 'no-version-zero';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (hasDepVersZero(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/prefer-no-version-zero-devDependencies.js b/src/rules/prefer-no-version-zero-devDependencies.js
index 7e042f1..fa64013 100644
--- a/src/rules/prefer-no-version-zero-devDependencies.js
+++ b/src/rules/prefer-no-version-zero-devDependencies.js
@@ -3,12 +3,11 @@
 const hasDepVersZero = require('./../validators/dependency-audit').hasDepVersZero;
 const LintIssue = require('./../LintIssue');
 const lintId = 'prefer-no-version-zero-devDependencies';
-const lintType = 'error';
 const nodeName = 'devDependencies';
 const message = 'You have invalid version 0 dependencies. Please use modules with a major version >= 1.';
 const ruleType = 'no-version-zero';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (hasDepVersZero(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/prefer-tilde-version-dependencies.js b/src/rules/prefer-tilde-version-dependencies.js
index 39fc04e..7521103 100644
--- a/src/rules/prefer-tilde-version-dependencies.js
+++ b/src/rules/prefer-tilde-version-dependencies.js
@@ -3,12 +3,11 @@
 const areVersRangesValid = require('./../validators/dependency-audit').areVersRangesValid;
 const LintIssue = require('./../LintIssue');
 const lintId = 'prefer-tilde-version-dependencies';
-const lintType = 'error';
 const nodeName = 'dependencies';
 const message = 'You are using an invalid version range. Please use ~.';
 const ruleType = 'dependencies-version-range';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   const rangeSpecifier = '~';
 
   if (!areVersRangesValid(packageJsonData, nodeName, rangeSpecifier)) {
@@ -19,5 +18,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/prefer-tilde-version-devDependencies.js b/src/rules/prefer-tilde-version-devDependencies.js
index 8c33a40..02967b7 100644
--- a/src/rules/prefer-tilde-version-devDependencies.js
+++ b/src/rules/prefer-tilde-version-devDependencies.js
@@ -3,12 +3,11 @@
 const areVersRangesValid = require('./../validators/dependency-audit').areVersRangesValid;
 const LintIssue = require('./../LintIssue');
 const lintId = 'prefer-tilde-version-devDependencies';
-const lintType = 'error';
 const nodeName = 'devDependencies';
 const message = 'You are using an invalid version range. Please use ~.';
 const ruleType = 'devDependencies-version-range';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   const rangeSpecifier = '~';
 
   if (!areVersRangesValid(packageJsonData, nodeName, rangeSpecifier)) {
@@ -19,5 +18,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/preferGlobal-type.js b/src/rules/preferGlobal-type.js
index ff09fbd..1b8b633 100755
--- a/src/rules/preferGlobal-type.js
+++ b/src/rules/preferGlobal-type.js
@@ -3,12 +3,11 @@
 const LintIssue = require('./../LintIssue');
 const isBoolean = require('./../validators/type').isBoolean;
 const lintId = 'preferGlobal-type';
-const lintType = 'error';
 const nodeName = 'preferGlobal';
 const message = 'Type should be a boolean';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isBoolean(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/private-type.js b/src/rules/private-type.js
index 1df1ee9..8aeea4a 100755
--- a/src/rules/private-type.js
+++ b/src/rules/private-type.js
@@ -3,12 +3,11 @@
 const LintIssue = require('./../LintIssue');
 const isBoolean = require('./../validators/type').isBoolean;
 const lintId = 'private-type';
-const lintType = 'error';
 const nodeName = 'private';
 const message = 'Type should be a boolean';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isBoolean(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/repository-type.js b/src/rules/repository-type.js
index 5777995..5cf13da 100755
--- a/src/rules/repository-type.js
+++ b/src/rules/repository-type.js
@@ -4,12 +4,11 @@ const isObject = require('./../validators/type').isObject;
 const isString = require('./../validators/type').isString;
 const LintIssue = require('./../LintIssue');
 const lintId = 'repository-type';
-const lintType = 'error';
 const nodeName = 'repository';
 const message = 'Type should be either a string or an Object';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isString(packageJsonData, nodeName) && !isObject(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -18,5 +17,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/author-required.js b/src/rules/require-author.js
similarity index 72%
rename from src/rules/author-required.js
rename to src/rules/require-author.js
index 9aaad23..9b42062 100755
--- a/src/rules/author-required.js
+++ b/src/rules/require-author.js
@@ -1,13 +1,12 @@
 'use strict';
 
 const LintIssue = require('./../LintIssue');
-const lintId = 'author-required';
-const lintType = 'error';
+const lintId = 'require-author';
 const nodeName = 'author';
 const message = 'author is required';
 const ruleType = 'required';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!packageJsonData.hasOwnProperty(nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -16,5 +15,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/require-bin.js b/src/rules/require-bin.js
new file mode 100644
index 0000000..11a1abb
--- /dev/null
+++ b/src/rules/require-bin.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-bin';
+const nodeName = 'bin';
+const message = 'bin is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-bugs.js b/src/rules/require-bugs.js
new file mode 100755
index 0000000..11520d5
--- /dev/null
+++ b/src/rules/require-bugs.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-bugs';
+const nodeName = 'bugs';
+const message = 'bugs is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-bundledDependencies.js b/src/rules/require-bundledDependencies.js
new file mode 100644
index 0000000..04fa330
--- /dev/null
+++ b/src/rules/require-bundledDependencies.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-bundledDependencies';
+const nodeName = 'bundledDependencies';
+const message = 'bundledDependencies is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-config.js b/src/rules/require-config.js
new file mode 100644
index 0000000..b7e1f4d
--- /dev/null
+++ b/src/rules/require-config.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-config';
+const nodeName = 'config';
+const message = 'config is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-contributors.js b/src/rules/require-contributors.js
new file mode 100644
index 0000000..dd3ce5f
--- /dev/null
+++ b/src/rules/require-contributors.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-contributors';
+const nodeName = 'contributors';
+const message = 'contributors is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-cpu.js b/src/rules/require-cpu.js
new file mode 100644
index 0000000..e6120fb
--- /dev/null
+++ b/src/rules/require-cpu.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-cpu';
+const nodeName = 'cpu';
+const message = 'cpu is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-dependencies.js b/src/rules/require-dependencies.js
new file mode 100644
index 0000000..9b3aab7
--- /dev/null
+++ b/src/rules/require-dependencies.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-dependencies';
+const nodeName = 'dependencies';
+const message = 'dependencies is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/description-required.js b/src/rules/require-description.js
similarity index 72%
rename from src/rules/description-required.js
rename to src/rules/require-description.js
index f276c2c..d307aad 100755
--- a/src/rules/description-required.js
+++ b/src/rules/require-description.js
@@ -1,13 +1,12 @@
 'use strict';
 
 const LintIssue = require('./../LintIssue');
-const lintId = 'description-required';
-const lintType = 'error';
+const lintId = 'require-description';
 const nodeName = 'description';
 const message = 'description is required';
 const ruleType = 'required';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!packageJsonData.hasOwnProperty(nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -16,5 +15,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/require-devDependencies.js b/src/rules/require-devDependencies.js
new file mode 100644
index 0000000..7ebe7cd
--- /dev/null
+++ b/src/rules/require-devDependencies.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-devDependencies';
+const nodeName = 'devDependencies';
+const message = 'devDependencies is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-directories.js b/src/rules/require-directories.js
new file mode 100644
index 0000000..afe122a
--- /dev/null
+++ b/src/rules/require-directories.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-directories';
+const nodeName = 'directories';
+const message = 'directories is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/engines-required.js b/src/rules/require-engines.js
similarity index 72%
rename from src/rules/engines-required.js
rename to src/rules/require-engines.js
index ff24762..aa678eb 100755
--- a/src/rules/engines-required.js
+++ b/src/rules/require-engines.js
@@ -1,13 +1,12 @@
 'use strict';
 
 const LintIssue = require('./../LintIssue');
-const lintId = 'engines-required';
-const lintType = 'error';
+const lintId = 'require-engines';
 const nodeName = 'engines';
 const message = 'engines is required';
 const ruleType = 'required';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!packageJsonData.hasOwnProperty(nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -16,5 +15,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/require-files.js b/src/rules/require-files.js
new file mode 100644
index 0000000..068cf68
--- /dev/null
+++ b/src/rules/require-files.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-files';
+const nodeName = 'files';
+const message = 'files is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-homepage.js b/src/rules/require-homepage.js
new file mode 100755
index 0000000..a990a69
--- /dev/null
+++ b/src/rules/require-homepage.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-homepage';
+const nodeName = 'homepage';
+const message = 'homepage is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-keywords.js b/src/rules/require-keywords.js
new file mode 100755
index 0000000..61c0468
--- /dev/null
+++ b/src/rules/require-keywords.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-keywords';
+const nodeName = 'keywords';
+const message = 'keywords is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/license-required.js b/src/rules/require-license.js
similarity index 72%
rename from src/rules/license-required.js
rename to src/rules/require-license.js
index 8e09ca1..21d2edd 100755
--- a/src/rules/license-required.js
+++ b/src/rules/require-license.js
@@ -1,13 +1,12 @@
 'use strict';
 
 const LintIssue = require('./../LintIssue');
-const lintId = 'license-required';
-const lintType = 'error';
+const lintId = 'require-license';
 const nodeName = 'license';
 const message = 'license is required';
 const ruleType = 'required';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!packageJsonData.hasOwnProperty(nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -16,5 +15,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/require-main.js b/src/rules/require-main.js
new file mode 100644
index 0000000..c69fd5d
--- /dev/null
+++ b/src/rules/require-main.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-main';
+const nodeName = 'main';
+const message = 'main is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-man.js b/src/rules/require-man.js
new file mode 100644
index 0000000..ae13a55
--- /dev/null
+++ b/src/rules/require-man.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-man';
+const nodeName = 'man';
+const message = 'man is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/name-required.js b/src/rules/require-name.js
similarity index 72%
rename from src/rules/name-required.js
rename to src/rules/require-name.js
index 6179acb..80eec5f 100755
--- a/src/rules/name-required.js
+++ b/src/rules/require-name.js
@@ -1,13 +1,12 @@
 'use strict';
 
 const LintIssue = require('./../LintIssue');
-const lintId = 'name-required';
-const lintType = 'error';
+const lintId = 'require-name';
 const nodeName = 'name';
 const message = 'name is required';
 const ruleType = 'required';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!packageJsonData.hasOwnProperty(nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -16,5 +15,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/require-optionalDependencies.js b/src/rules/require-optionalDependencies.js
new file mode 100644
index 0000000..076c7b9
--- /dev/null
+++ b/src/rules/require-optionalDependencies.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-optionalDependencies';
+const nodeName = 'optionalDependencies';
+const message = 'optionalDependencies is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-os.js b/src/rules/require-os.js
new file mode 100644
index 0000000..d0e328f
--- /dev/null
+++ b/src/rules/require-os.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-os';
+const nodeName = 'os';
+const message = 'os is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-peerDependencies.js b/src/rules/require-peerDependencies.js
new file mode 100644
index 0000000..5df3728
--- /dev/null
+++ b/src/rules/require-peerDependencies.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-peerDependencies';
+const nodeName = 'peerDependencies';
+const message = 'peerDependencies is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-preferGlobal.js b/src/rules/require-preferGlobal.js
new file mode 100644
index 0000000..79b1859
--- /dev/null
+++ b/src/rules/require-preferGlobal.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-preferGlobal';
+const nodeName = 'preferGlobal';
+const message = 'preferGlobal is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-private.js b/src/rules/require-private.js
new file mode 100644
index 0000000..aa3b254
--- /dev/null
+++ b/src/rules/require-private.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-private';
+const nodeName = 'private';
+const message = 'private is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/require-publishConfig.js b/src/rules/require-publishConfig.js
new file mode 100644
index 0000000..9609110
--- /dev/null
+++ b/src/rules/require-publishConfig.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-publishConfig';
+const nodeName = 'publishConfig';
+const message = 'publishConfig is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/repository-required.js b/src/rules/require-repository.js
similarity index 72%
rename from src/rules/repository-required.js
rename to src/rules/require-repository.js
index e66ecb7..7b9de3e 100755
--- a/src/rules/repository-required.js
+++ b/src/rules/require-repository.js
@@ -1,13 +1,12 @@
 'use strict';
 
 const LintIssue = require('./../LintIssue');
-const lintId = 'repository-required';
-const lintType = 'error';
+const lintId = 'require-repository';
 const nodeName = 'repository';
 const message = 'repository is required';
 const ruleType = 'required';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!packageJsonData.hasOwnProperty(nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -16,5 +15,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/require-scripts.js b/src/rules/require-scripts.js
new file mode 100644
index 0000000..20900e4
--- /dev/null
+++ b/src/rules/require-scripts.js
@@ -0,0 +1,18 @@
+'use strict';
+
+const LintIssue = require('./../LintIssue');
+const lintId = 'require-scripts';
+const nodeName = 'scripts';
+const message = 'scripts is required';
+const ruleType = 'required';
+
+const lint = function(packageJsonData, lintType) {
+  if (!packageJsonData.hasOwnProperty(nodeName)) {
+    return new LintIssue(lintId, lintType, nodeName, message);
+  }
+
+  return true;
+};
+
+module.exports.lint = lint;
+module.exports.ruleType = ruleType;
diff --git a/src/rules/version-required.js b/src/rules/require-version.js
similarity index 72%
rename from src/rules/version-required.js
rename to src/rules/require-version.js
index 8ce8c68..1b0f9cf 100755
--- a/src/rules/version-required.js
+++ b/src/rules/require-version.js
@@ -1,13 +1,12 @@
 'use strict';
 
 const LintIssue = require('./../LintIssue');
-const lintId = 'version-required';
-const lintType = 'error';
+const lintId = 'require-version';
 const nodeName = 'version';
 const message = 'version is required';
 const ruleType = 'required';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!packageJsonData.hasOwnProperty(nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -16,5 +15,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/scripts-type.js b/src/rules/scripts-type.js
index 962c5d2..70936b3 100755
--- a/src/rules/scripts-type.js
+++ b/src/rules/scripts-type.js
@@ -3,12 +3,11 @@
 const isObject = require('./../validators/type').isObject;
 const LintIssue = require('./../LintIssue');
 const lintId = 'scripts-type';
-const lintType = 'error';
 const nodeName = 'scripts';
 const message = 'Type should be an Object';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isObject(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/author-valid-values.js b/src/rules/valid-values-author.js
similarity index 74%
rename from src/rules/author-valid-values.js
rename to src/rules/valid-values-author.js
index b016946..cf41071 100755
--- a/src/rules/author-valid-values.js
+++ b/src/rules/valid-values-author.js
@@ -2,13 +2,12 @@
 
 const LintIssue = require('./../LintIssue');
 const isValidValue = require('./../validators/valid-values').isValidValue;
-const lintId = 'author-valid-values';
-const lintType = 'error';
+const lintId = 'valid-values-author';
 const nodeName = 'author';
 const message = 'Invalid value for author';
 const ruleType = 'valid-values';
 
-const lint = function(packageJsonData, validValues) {
+const lint = function(packageJsonData, lintType, validValues) {
   if (!isValidValue(packageJsonData, nodeName, validValues)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData, validValues) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/private-valid-values.js b/src/rules/valid-values-private.js
similarity index 81%
rename from src/rules/private-valid-values.js
rename to src/rules/valid-values-private.js
index f6b6fe5..8ccdef2 100755
--- a/src/rules/private-valid-values.js
+++ b/src/rules/valid-values-private.js
@@ -2,8 +2,7 @@
 
 const LintIssue = require('./../LintIssue');
 const isValidValue = require('./../validators/valid-values').isValidValue;
-const lintId = 'private-valid-values';
-const lintType = 'error';
+const lintId = 'valid-values-private';
 const nodeName = 'private';
 const message = 'Invalid value for private';
 const ruleType = 'valid-values';
@@ -11,10 +10,11 @@ const ruleType = 'valid-values';
 /**
  * [function description]
  * @param  {Object}   packageJsonData   Valid package.json object
+ * @param  {String}   lintType          'error' or 'warning'
  * @param  {Array}    validValues       An array of valid values
  * @return {Object|Boolean}             LintIssue object if invalid. True if valid
  */
-const lint = function(packageJsonData, validValues) {
+const lint = function(packageJsonData, lintType, validValues) {
   if (!isValidValue(packageJsonData, nodeName, validValues)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -23,5 +23,4 @@ const lint = function(packageJsonData, validValues) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/version-format.js b/src/rules/version-format.js
index 8740181..1a3dc5a 100755
--- a/src/rules/version-format.js
+++ b/src/rules/version-format.js
@@ -3,12 +3,11 @@
 const isValidVersionNumber = require('./../validators/format').isValidVersionNumber;
 const LintIssue = require('./../LintIssue');
 const lintId = 'version-format';
-const lintType = 'error';
 const nodeName = 'version';
 const message = 'Format must be a valid semantic version';
 const ruleType = 'format';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isValidVersionNumber(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;
diff --git a/src/rules/version-type.js b/src/rules/version-type.js
index 749a0ef..1f4cad3 100755
--- a/src/rules/version-type.js
+++ b/src/rules/version-type.js
@@ -3,12 +3,11 @@
 const isString = require('./../validators/type').isString;
 const LintIssue = require('./../LintIssue');
 const lintId = 'version-type';
-const lintType = 'error';
 const nodeName = 'version';
 const message = 'Type should be a string';
 const ruleType = 'type';
 
-const lint = function(packageJsonData) {
+const lint = function(packageJsonData, lintType) {
   if (!isString(packageJsonData, nodeName)) {
     return new LintIssue(lintId, lintType, nodeName, message);
   }
@@ -17,5 +16,4 @@ const lint = function(packageJsonData) {
 };
 
 module.exports.lint = lint;
-module.exports.lintType = lintType;
 module.exports.ruleType = ruleType;


Test patch:
diff --git a/tests/unit/ConfigTest.js b/tests/unit/ConfigTest.js
index 4fa1f77..6c91460 100755
--- a/tests/unit/ConfigTest.js
+++ b/tests/unit/ConfigTest.js
@@ -14,7 +14,7 @@ describe('Config Unit Tests', function() {
   beforeEach(function() {
     const stub = sinon.stub(fs, 'readFileSync');
 
-    stub.returns('{"version-type": true}');
+    stub.returns('{"version-type": "error"}');
 
     spy = sinon.spy(path, 'join');
   });
@@ -27,7 +27,7 @@ describe('Config Unit Tests', function() {
   context('when a rules object is passed', function() {
     it('the config object should return that object', function() {
       const passedConfig = {
-        'version-type': true
+        'version-type': 'error'
       };
       const config = new Config(passedConfig);
 
@@ -40,7 +40,7 @@ describe('Config Unit Tests', function() {
       const passedConfig = './.npmpackagejsonlintrc';
       const config = new Config(passedConfig);
       const obj = {
-        'version-type': true
+        'version-type': 'error'
       };
 
       spy.calledOnce.should.be.true();
@@ -54,7 +54,7 @@ describe('Config Unit Tests', function() {
       const passedConfig = '/Users/awesomeUser/.npmpackagejsonlintrc';
       const config = new Config(passedConfig);
       const obj = {
-        'version-type': true
+        'version-type': 'error'
       };
 
       spy.called.should.be.false();
@@ -70,4 +70,82 @@ describe('Config Unit Tests', function() {
       config.get().should.eql(defaultConfig);
     });
   });
+
+  context('when a valid npmpackagejsonlintrc file object is passed', function() {
+    it('true should be returned', function() {
+      const rcFileObj = {
+        'require-author': 'error',
+        'require-version': 'warning',
+        'valid-values-author': ['error', ['Thomas', 'Lindner', 'Thomas Lindner']],
+        'valid-values-private': ['warning', [true, false]]
+      };
+      const config = new Config(rcFileObj);
+
+      config._validateConfig(rcFileObj).should.eql(true);
+    });
+  });
+
+  context('when a rule is set to a boolean', function() {
+    it('an error should be thrown', function() {
+      const rcFileObj = {
+        'require-author': true,
+        'require-version': 'warning',
+        'valid-values-author': ['error', ['Thomas', 'Lindner', 'Thomas Lindner']],
+        'valid-values-private': ['warning', [true, false]]
+      };
+      const config = new Config(rcFileObj);
+
+      (function() {
+        config._validateConfig(rcFileObj);
+      }).should.throw('require-author - must be set to "error" or "warning". Currently set to true');
+    });
+  });
+
+  context('when a rule is set to a number', function() {
+    it('an error should be thrown', function() {
+      const rcFileObj = {
+        'require-author': 1,
+        'require-version': 'warning',
+        'valid-values-author': ['error', ['Thomas', 'Lindner', 'Thomas Lindner']],
+        'valid-values-private': ['warning', [true, false]]
+      };
+      const config = new Config(rcFileObj);
+
+      (function() {
+        config._validateConfig(rcFileObj);
+      }).should.throw('require-author - must be set to "error" or "warning". Currently set to 1');
+    });
+  });
+
+  context('when a rule is an array rule and the first key is not equal to error or warning', function() {
+    it('an error should be thrown', function() {
+      const rcFileObj = {
+        'require-author': 'error',
+        'require-version': 'warning',
+        'valid-values-author': [true, ['Thomas', 'Lindner', 'Thomas Lindner']],
+        'valid-values-private': ['warning', [true, false]]
+      };
+      const config = new Config(rcFileObj);
+
+      (function() {
+        config._validateConfig(rcFileObj);
+      }).should.throw('valid-values-author - first key must be set to "error" or "warning". Currently set to true');
+    });
+  });
+
+  context('when a rule is an array rule and the second key is not an Array', function() {
+    it('an error should be thrown', function() {
+      const rcFileObj = {
+        'require-author': 'error',
+        'require-version': 'warning',
+        'valid-values-author': ['error', 'Thomas'],
+        'valid-values-private': ['warning', [true, false]]
+      };
+      const config = new Config(rcFileObj);
+
+      (function() {
+        config._validateConfig(rcFileObj);
+      }).should.throw('valid-values-author - second key must be set an array. Currently set to Thomas');
+    });
+  });
 });
diff --git a/tests/unit/NpmPackageJsonLintTest.js b/tests/unit/NpmPackageJsonLintTest.js
index 6d8f1a4..7560463 100755
--- a/tests/unit/NpmPackageJsonLintTest.js
+++ b/tests/unit/NpmPackageJsonLintTest.js
@@ -17,8 +17,8 @@ describe('NpmPackageJsonLint Unit Tests', function() {
           description: true
         };
         const config = {
-          'description-type': true,
-          'name-format': true
+          'description-type': 'error',
+          'name-format': 'error'
         };
         const options = {
           ignoreWarnings: false
@@ -45,15 +45,15 @@ describe('NpmPackageJsonLint Unit Tests', function() {
           name: 'ALLCAPS'
         };
         const config = {
-          'keywords-recommended': true,
-          'name-format': true
+          'require-keywords': 'error',
+          'name-format': 'warning'
         };
         const options = {
           ignoreWarnings: false
         };
         const npmPackageJsonLint = new NpmPackageJsonLint(packageJsonData, config, options);
         const rules = {
-          'keywords-recommended': 'rules\\keywords-recommended.js',
+          'require-keywords': 'rules\\require-keywords.js',
           'name-format': 'rules\\name-format.js'
         };
         const rulesStub = sinon.stub(npmPackageJsonLint, '_loadRules').returns(rules);
@@ -73,15 +73,15 @@ describe('NpmPackageJsonLint Unit Tests', function() {
           name: 'ALLCAPS'
         };
         const config = {
-          'keywords-recommended': true,
-          'name-format': true
+          'require-keywords': 'warning',
+          'name-format': 'error'
         };
         const options = {
           ignoreWarnings: true
         };
         const npmPackageJsonLint = new NpmPackageJsonLint(packageJsonData, config, options);
         const rules = {
-          'keywords-recommended': 'rules\\keywords-recommended.js',
+          'require-keywords': 'rules\\require-keywords.js',
           'name-format': 'rules\\name-format.js'
         };
         const rulesStub = sinon.stub(npmPackageJsonLint, '_loadRules').returns(rules);
@@ -100,17 +100,17 @@ describe('NpmPackageJsonLint Unit Tests', function() {
           author: 'Caitlin Snow'
         };
         const config = {
-          'author-valid-values': [
+          'valid-values-author': ['error', [
             'Barry Allen',
             'Iris West'
-          ]
+          ]]
         };
         const options = {
           ignoreWarnings: true
         };
         const npmPackageJsonLint = new NpmPackageJsonLint(packageJsonData, config, options);
         const rules = {
-          'author-valid-values': 'rules\\author-valid-values.js'
+          'valid-values-author': 'rules\\valid-values-author.js'
         };
         const rulesStub = sinon.stub(npmPackageJsonLint, '_loadRules').returns(rules);
         const configStub = sinon.stub(npmPackageJsonLint, '_getConfig').returns(config);
diff --git a/tests/unit/RulesTest.js b/tests/unit/RulesTest.js
index f29d520..44f3321 100755
--- a/tests/unit/RulesTest.js
+++ b/tests/unit/RulesTest.js
@@ -30,10 +30,10 @@ describe('Rules Unit Tests', function() {
         const fsStub = sinon.stub(fs, 'readdirSync');
         const pathStub = sinon.stub(path, 'join');
 
-        fsStub.onFirstCall().returns(['version-type.js', 'version-required.js']);
+        fsStub.onFirstCall().returns(['version-type.js', 'require-version.js']);
         pathStub.onFirstCall().returns('c/git/rules');
         pathStub.onSecondCall().returns('c/git/rules/version-type.js');
-        pathStub.onThirdCall().returns('c/git/rules/version-required.js');
+        pathStub.onThirdCall().returns('c/git/rules/require-version.js');
       });
 
       after(function() {
@@ -46,7 +46,7 @@ describe('Rules Unit Tests', function() {
         const result = rules.load();
 
         rules.rules['version-type'].should.equal('c/git/rules/version-type.js');
-        rules.rules['version-required'].should.equal('c/git/rules/version-required.js');
+        rules.rules['require-version'].should.equal('c/git/rules/require-version.js');
       });
     });
 
diff --git a/tests/unit/rules/bin-typeTest.js b/tests/unit/rules/bin-typeTest.js
index f64ac9a..5d829e5 100755
--- a/tests/unit/rules/bin-typeTest.js
+++ b/tests/unit/rules/bin-typeTest.js
@@ -10,7 +10,7 @@ describe('bin-type Unit Tests', function() {
       const packageJsonData = {
         bin: true
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('bin-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('bin-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/bundledDependencies-typeTest.js b/tests/unit/rules/bundledDependencies-typeTest.js
new file mode 100644
index 0000000..de350e1
--- /dev/null
+++ b/tests/unit/rules/bundledDependencies-typeTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/bundledDependencies-type').lint;
+
+describe('bundledDependencies-type Unit Tests', function() {
+  context('when package.json has node with incorrect type', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {
+        bundledDependencies: 'bundledDependencies'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('bundledDependencies-type');
+      response.lintType.should.equal('error');
+      response.node.should.equal('bundledDependencies');
+      response.lintMessage.should.equal('Type should be an Object');
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+});
diff --git a/tests/unit/rules/config-typeTest.js b/tests/unit/rules/config-typeTest.js
index 7174ab0..838dbfb 100755
--- a/tests/unit/rules/config-typeTest.js
+++ b/tests/unit/rules/config-typeTest.js
@@ -10,7 +10,7 @@ describe('config-type Unit Tests', function() {
       const packageJsonData = {
         config: 'config'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('config-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('config-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/cpu-typeTest.js b/tests/unit/rules/cpu-typeTest.js
new file mode 100755
index 0000000..9d8e5f1
--- /dev/null
+++ b/tests/unit/rules/cpu-typeTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/os-type').lint;
+
+describe('os-type Unit Tests', function() {
+  context('when package.json has node with incorrect type', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {
+        os: true
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('os-type');
+      response.lintType.should.equal('error');
+      response.node.should.equal('os');
+      response.lintMessage.should.equal('Type should be an array');
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+});
diff --git a/tests/unit/rules/dependencies-typeTest.js b/tests/unit/rules/dependencies-typeTest.js
index 4b433ec..3ac4cf8 100755
--- a/tests/unit/rules/dependencies-typeTest.js
+++ b/tests/unit/rules/dependencies-typeTest.js
@@ -10,7 +10,7 @@ describe('dependencies-type Unit Tests', function() {
       const packageJsonData = {
         dependencies: 'dependencies'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('dependencies-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('dependencies-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/description-typeTest.js b/tests/unit/rules/description-typeTest.js
index eaa984d..10badb5 100755
--- a/tests/unit/rules/description-typeTest.js
+++ b/tests/unit/rules/description-typeTest.js
@@ -10,7 +10,7 @@ describe('description-type Unit Tests', function() {
       const packageJsonData = {
         description: true
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('description-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('description-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/devDependencies-typeTest.js b/tests/unit/rules/devDependencies-typeTest.js
index f7b1094..720805a 100755
--- a/tests/unit/rules/devDependencies-typeTest.js
+++ b/tests/unit/rules/devDependencies-typeTest.js
@@ -10,7 +10,7 @@ describe('devDependencies-type Unit Tests', function() {
       const packageJsonData = {
         devDependencies: 'devDependencies'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('devDependencies-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('devDependencies-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/directories-typeTest.js b/tests/unit/rules/directories-typeTest.js
index d246f18..5891b9f 100755
--- a/tests/unit/rules/directories-typeTest.js
+++ b/tests/unit/rules/directories-typeTest.js
@@ -10,7 +10,7 @@ describe('directories-type Unit Tests', function() {
       const packageJsonData = {
         directories: 'directories'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('directories-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('directories-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/engines-typeTest.js b/tests/unit/rules/engines-typeTest.js
index be7bbae..21628b4 100755
--- a/tests/unit/rules/engines-typeTest.js
+++ b/tests/unit/rules/engines-typeTest.js
@@ -10,7 +10,7 @@ describe('engines-type Unit Tests', function() {
       const packageJsonData = {
         engines: 'engines'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('engines-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('engines-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/files-typeTest.js b/tests/unit/rules/files-typeTest.js
index 6332eed..f32387f 100755
--- a/tests/unit/rules/files-typeTest.js
+++ b/tests/unit/rules/files-typeTest.js
@@ -10,7 +10,7 @@ describe('files-type Unit Tests', function() {
       const packageJsonData = {
         files: 'string'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('files-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('files-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/homepage-typeTest.js b/tests/unit/rules/homepage-typeTest.js
index 2d52a8a..ec23584 100755
--- a/tests/unit/rules/homepage-typeTest.js
+++ b/tests/unit/rules/homepage-typeTest.js
@@ -10,7 +10,7 @@ describe('homepage-type Unit Tests', function() {
       const packageJsonData = {
         homepage: true
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('homepage-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('homepage-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/keywords-typeTest.js b/tests/unit/rules/keywords-typeTest.js
index 6332eed..f32387f 100755
--- a/tests/unit/rules/keywords-typeTest.js
+++ b/tests/unit/rules/keywords-typeTest.js
@@ -10,7 +10,7 @@ describe('files-type Unit Tests', function() {
       const packageJsonData = {
         files: 'string'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('files-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('files-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/license-typeTest.js b/tests/unit/rules/license-typeTest.js
index 3827786..224ba0d 100755
--- a/tests/unit/rules/license-typeTest.js
+++ b/tests/unit/rules/license-typeTest.js
@@ -10,7 +10,7 @@ describe('license-type Unit Tests', function() {
       const packageJsonData = {
         license: true
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('license-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('license-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/main-typeTest.js b/tests/unit/rules/main-typeTest.js
index 5f6c7a8..fbb65fe 100755
--- a/tests/unit/rules/main-typeTest.js
+++ b/tests/unit/rules/main-typeTest.js
@@ -10,7 +10,7 @@ describe('main-type Unit Tests', function() {
       const packageJsonData = {
         main: true
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('main-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('main-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/man-typeTest.js b/tests/unit/rules/man-typeTest.js
old mode 100755
new mode 100644
index b73e561..cb1eae4
--- a/tests/unit/rules/man-typeTest.js
+++ b/tests/unit/rules/man-typeTest.js
@@ -8,21 +8,21 @@ describe('man-type Unit Tests', function() {
   context('when package.json has node with incorrect type', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {
-        man: 'man'
+        man: true
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('man-type');
       response.lintType.should.equal('error');
       response.node.should.equal('man');
-      response.lintMessage.should.equal('Type should be an Object');
+      response.lintMessage.should.equal('Type should be either a string or an array');
     });
   });
 
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/name-formatTest.js b/tests/unit/rules/name-formatTest.js
index accbe10..b963dff 100755
--- a/tests/unit/rules/name-formatTest.js
+++ b/tests/unit/rules/name-formatTest.js
@@ -10,7 +10,7 @@ describe('name-format Unit Tests', function() {
       const packageJsonData = {
         name: 'ImNotLowercase'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('name-format');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('name-format Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/name-typeTest.js b/tests/unit/rules/name-typeTest.js
index 4a78508..eafaf8a 100755
--- a/tests/unit/rules/name-typeTest.js
+++ b/tests/unit/rules/name-typeTest.js
@@ -10,7 +10,7 @@ describe('name-type Unit Tests', function() {
       const packageJsonData = {
         name: true
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('name-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('name-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/dependencies-invalid-dependenciesTest.js b/tests/unit/rules/no-restricted-dependenciesTest.js
similarity index 67%
rename from tests/unit/rules/dependencies-invalid-dependenciesTest.js
rename to tests/unit/rules/no-restricted-dependenciesTest.js
index 26bf565..0005ac6 100755
--- a/tests/unit/rules/dependencies-invalid-dependenciesTest.js
+++ b/tests/unit/rules/no-restricted-dependenciesTest.js
@@ -2,10 +2,10 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/dependencies-invalid-dependencies').lint;
+const lint = requireHelper('rules/no-restricted-dependencies').lint;
 
-describe('dependencies-invalid-dependencies Unit Tests', function() {
-  context('when package.json has node with an invalid value', function() {
+describe('no-restricted-dependencies Unit Tests', function() {
+  context('when package.json has node with a restricted value', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {
         dependencies: {
@@ -16,12 +16,12 @@ describe('dependencies-invalid-dependencies Unit Tests', function() {
         'npm-package-json-lint',
         'grunt-npm-package-json-lint'
       ];
-      const response = lint(packageJsonData, invalidDependencies);
+      const response = lint(packageJsonData, 'error', invalidDependencies);
 
-      response.lintId.should.equal('dependencies-invalid-dependencies');
+      response.lintId.should.equal('no-restricted-dependencies');
       response.lintType.should.equal('error');
       response.node.should.equal('dependencies');
-      response.lintMessage.should.equal('You are using an invalid dependency. Please remove it.');
+      response.lintMessage.should.equal('You are using a restricted dependency. Please remove it.');
     });
   });
 
@@ -36,7 +36,7 @@ describe('dependencies-invalid-dependencies Unit Tests', function() {
         'npm-package-json-lint',
         'grunt-npm-package-json-lint'
       ];
-      const response = lint(packageJsonData, invalidDependencies);
+      const response = lint(packageJsonData, 'error', invalidDependencies);
 
       response.should.be.true();
     });
@@ -49,7 +49,7 @@ describe('dependencies-invalid-dependencies Unit Tests', function() {
         'npm-package-json-lint',
         'grunt-npm-package-json-lint'
       ];
-      const response = lint(packageJsonData, invalidDependencies);
+      const response = lint(packageJsonData, 'error', invalidDependencies);
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/devDependencies-invalid-dependenciesTest.js b/tests/unit/rules/no-restricted-devDependenciesTest.js
similarity index 67%
rename from tests/unit/rules/devDependencies-invalid-dependenciesTest.js
rename to tests/unit/rules/no-restricted-devDependenciesTest.js
index 566db2c..98ad239 100755
--- a/tests/unit/rules/devDependencies-invalid-dependenciesTest.js
+++ b/tests/unit/rules/no-restricted-devDependenciesTest.js
@@ -2,10 +2,10 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/devDependencies-invalid-dependencies').lint;
+const lint = requireHelper('rules/no-restricted-devDependencies').lint;
 
-describe('devDependencies-invalid-dependencies Unit Tests', function() {
-  context('when package.json has node with an invalid value', function() {
+describe('no-restricted-devDependencies Unit Tests', function() {
+  context('when package.json has node with a restricted value', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {
         devDependencies: {
@@ -16,12 +16,12 @@ describe('devDependencies-invalid-dependencies Unit Tests', function() {
         'npm-package-json-lint',
         'grunt-npm-package-json-lint'
       ];
-      const response = lint(packageJsonData, invalidDependencies);
+      const response = lint(packageJsonData, 'error', invalidDependencies);
 
-      response.lintId.should.equal('devDependencies-invalid-dependencies');
+      response.lintId.should.equal('no-restricted-devDependencies');
       response.lintType.should.equal('error');
       response.node.should.equal('devDependencies');
-      response.lintMessage.should.equal('You are using an invalid dependency. Please remove it.');
+      response.lintMessage.should.equal('You are using a restricted dependency. Please remove it.');
     });
   });
 
@@ -36,7 +36,7 @@ describe('devDependencies-invalid-dependencies Unit Tests', function() {
         'npm-package-json-lint',
         'grunt-npm-package-json-lint'
       ];
-      const response = lint(packageJsonData, invalidDependencies);
+      const response = lint(packageJsonData, 'error', invalidDependencies);
 
       response.should.be.true();
     });
@@ -49,7 +49,7 @@ describe('devDependencies-invalid-dependencies Unit Tests', function() {
         'npm-package-json-lint',
         'grunt-npm-package-json-lint'
       ];
-      const response = lint(packageJsonData, invalidDependencies);
+      const response = lint(packageJsonData, 'error', invalidDependencies);
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/dependencies-invalid-pre-release-dependenciesTest.js b/tests/unit/rules/no-restricted-pre-release-dependenciesTest.js
similarity index 66%
rename from tests/unit/rules/dependencies-invalid-pre-release-dependenciesTest.js
rename to tests/unit/rules/no-restricted-pre-release-dependenciesTest.js
index 3846afb..3d0a6db 100755
--- a/tests/unit/rules/dependencies-invalid-pre-release-dependenciesTest.js
+++ b/tests/unit/rules/no-restricted-pre-release-dependenciesTest.js
@@ -2,10 +2,10 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/dependencies-invalid-pre-release-dependencies').lint;
+const lint = requireHelper('rules/no-restricted-pre-release-dependencies').lint;
 
-describe('dependencies-invalid-pre-release-dependencies Unit Tests', function() {
-  context('when package.json has node with an invalid value', function() {
+describe('no-restricted-pre-release-dependencies Unit Tests', function() {
+  context('when package.json has node with a restricted value', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {
         dependencies: {
@@ -16,12 +16,12 @@ describe('dependencies-invalid-pre-release-dependencies Unit Tests', function()
         'npm-package-json-lint',
         'grunt-npm-package-json-lint'
       ];
-      const response = lint(packageJsonData, invldPreReleaseDeps);
+      const response = lint(packageJsonData, 'error', invldPreReleaseDeps);
 
-      response.lintId.should.equal('dependencies-invalid-pre-release-dependencies');
+      response.lintId.should.equal('no-restricted-pre-release-dependencies');
       response.lintType.should.equal('error');
       response.node.should.equal('dependencies');
-      response.lintMessage.should.equal('You are using an invalid pre-release dependency. Please remove it.');
+      response.lintMessage.should.equal('You are using a restricted pre-release dependency. Please remove it.');
     });
   });
 
@@ -36,7 +36,7 @@ describe('dependencies-invalid-pre-release-dependencies Unit Tests', function()
         'npm-package-json-lint',
         'grunt-npm-package-json-lint'
       ];
-      const response = lint(packageJsonData, invldPreReleaseDeps);
+      const response = lint(packageJsonData, 'error', invldPreReleaseDeps);
 
       response.should.be.true();
     });
@@ -49,7 +49,7 @@ describe('dependencies-invalid-pre-release-dependencies Unit Tests', function()
         'npm-package-json-lint',
         'grunt-npm-package-json-lint'
       ];
-      const response = lint(packageJsonData, invldPreReleaseDeps);
+      const response = lint(packageJsonData, 'error', invldPreReleaseDeps);
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/devDependencies-invalid-pre-release-dependenciesTest.js b/tests/unit/rules/no-restricted-pre-release-devDependenciesTest.js
similarity index 65%
rename from tests/unit/rules/devDependencies-invalid-pre-release-dependenciesTest.js
rename to tests/unit/rules/no-restricted-pre-release-devDependenciesTest.js
index 675fa7e..9de60ef 100755
--- a/tests/unit/rules/devDependencies-invalid-pre-release-dependenciesTest.js
+++ b/tests/unit/rules/no-restricted-pre-release-devDependenciesTest.js
@@ -2,10 +2,10 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/devDependencies-invalid-pre-release-dependencies').lint;
+const lint = requireHelper('rules/no-restricted-pre-release-devDependencies').lint;
 
-describe('devDependencies-invalid-pre-release-dependencies Unit Tests', function() {
-  context('when package.json has node with an invalid value', function() {
+describe('no-restricted-pre-release-devDependencies Unit Tests', function() {
+  context('when package.json has node with a restricted value', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {
         devDependencies: {
@@ -16,12 +16,12 @@ describe('devDependencies-invalid-pre-release-dependencies Unit Tests', function
         'npm-package-json-lint',
         'grunt-npm-package-json-lint'
       ];
-      const response = lint(packageJsonData, invldPreReleaseDeps);
+      const response = lint(packageJsonData, 'error', invldPreReleaseDeps);
 
-      response.lintId.should.equal('devDependencies-invalid-pre-release-dependencies');
+      response.lintId.should.equal('no-restricted-pre-release-devDependencies');
       response.lintType.should.equal('error');
       response.node.should.equal('devDependencies');
-      response.lintMessage.should.equal('You are using an invalid pre-release dependency. Please remove it.');
+      response.lintMessage.should.equal('You are using a restricted pre-release dependency. Please remove it.');
     });
   });
 
@@ -36,7 +36,7 @@ describe('devDependencies-invalid-pre-release-dependencies Unit Tests', function
         'npm-package-json-lint',
         'grunt-npm-package-json-lint'
       ];
-      const response = lint(packageJsonData, invldPreReleaseDeps);
+      const response = lint(packageJsonData, 'error', invldPreReleaseDeps);
 
       response.should.be.true();
     });
@@ -49,7 +49,7 @@ describe('devDependencies-invalid-pre-release-dependencies Unit Tests', function
         'npm-package-json-lint',
         'grunt-npm-package-json-lint'
       ];
-      const response = lint(packageJsonData, invldPreReleaseDeps);
+      const response = lint(packageJsonData, 'error', invldPreReleaseDeps);
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/optionalDependencies-typeTest.js b/tests/unit/rules/optionalDependencies-typeTest.js
new file mode 100644
index 0000000..c5596ee
--- /dev/null
+++ b/tests/unit/rules/optionalDependencies-typeTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/optionalDependencies-type').lint;
+
+describe('optionalDependencies-type Unit Tests', function() {
+  context('when package.json has node with incorrect type', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {
+        optionalDependencies: 'optionalDependencies'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('optionalDependencies-type');
+      response.lintType.should.equal('error');
+      response.node.should.equal('optionalDependencies');
+      response.lintMessage.should.equal('Type should be an Object');
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+});
diff --git a/tests/unit/rules/os-typeTest.js b/tests/unit/rules/os-typeTest.js
new file mode 100644
index 0000000..9d8e5f1
--- /dev/null
+++ b/tests/unit/rules/os-typeTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/os-type').lint;
+
+describe('os-type Unit Tests', function() {
+  context('when package.json has node with incorrect type', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {
+        os: true
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('os-type');
+      response.lintType.should.equal('error');
+      response.node.should.equal('os');
+      response.lintMessage.should.equal('Type should be an array');
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+});
diff --git a/tests/unit/rules/peerDependencies-typeTest.js b/tests/unit/rules/peerDependencies-typeTest.js
new file mode 100644
index 0000000..5d3eb85
--- /dev/null
+++ b/tests/unit/rules/peerDependencies-typeTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/peerDependencies-type').lint;
+
+describe('peerDependencies-type Unit Tests', function() {
+  context('when package.json has node with incorrect type', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {
+        peerDependencies: 'peerDependencies'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('peerDependencies-type');
+      response.lintType.should.equal('error');
+      response.node.should.equal('peerDependencies');
+      response.lintMessage.should.equal('Type should be an Object');
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+});
diff --git a/tests/unit/rules/prefer-caret-version-dependenciesTest.js b/tests/unit/rules/prefer-caret-version-dependenciesTest.js
index c08c06f..3c1091b 100644
--- a/tests/unit/rules/prefer-caret-version-dependenciesTest.js
+++ b/tests/unit/rules/prefer-caret-version-dependenciesTest.js
@@ -12,7 +12,7 @@ describe('prefer-caret-version-dependencies Unit Tests', function() {
           'npm-package-json-lint': '~1.0.0'
         }
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('prefer-caret-version-dependencies');
       response.lintType.should.equal('error');
@@ -28,7 +28,7 @@ describe('prefer-caret-version-dependencies Unit Tests', function() {
           'gulp-npm-package-json-lint': '^1.0.0'
         }
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -37,7 +37,7 @@ describe('prefer-caret-version-dependencies Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/prefer-caret-version-devDependenciesTest.js b/tests/unit/rules/prefer-caret-version-devDependenciesTest.js
index 1d99203..8fb0ef2 100644
--- a/tests/unit/rules/prefer-caret-version-devDependenciesTest.js
+++ b/tests/unit/rules/prefer-caret-version-devDependenciesTest.js
@@ -12,7 +12,7 @@ describe('prefer-caret-version-devDependencies Unit Tests', function() {
           'npm-package-json-lint': '~1.0.0'
         }
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('prefer-caret-version-devDependencies');
       response.lintType.should.equal('error');
@@ -28,7 +28,7 @@ describe('prefer-caret-version-devDependencies Unit Tests', function() {
           'gulp-npm-package-json-lint': '^1.0.0'
         }
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -37,7 +37,7 @@ describe('prefer-caret-version-devDependencies Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/prefer-no-version-zero-dependenciesTest.js b/tests/unit/rules/prefer-no-version-zero-dependenciesTest.js
index 8662fbe..03b5e8b 100644
--- a/tests/unit/rules/prefer-no-version-zero-dependenciesTest.js
+++ b/tests/unit/rules/prefer-no-version-zero-dependenciesTest.js
@@ -12,7 +12,7 @@ describe('prefer-no-version-zero-dependencies Unit Tests', function() {
           'npm-package-json-lint': '~0.3.0'
         }
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('prefer-no-version-zero-dependencies');
       response.lintType.should.equal('error');
@@ -28,7 +28,7 @@ describe('prefer-no-version-zero-dependencies Unit Tests', function() {
           'gulp-npm-package-json-lint': '^1.0.0'
         }
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -37,7 +37,7 @@ describe('prefer-no-version-zero-dependencies Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/prefer-no-version-zero-devDependenciesTest.js b/tests/unit/rules/prefer-no-version-zero-devDependenciesTest.js
index 17dc08e..0f4102d 100644
--- a/tests/unit/rules/prefer-no-version-zero-devDependenciesTest.js
+++ b/tests/unit/rules/prefer-no-version-zero-devDependenciesTest.js
@@ -12,7 +12,7 @@ describe('prefer-no-version-zero-devDependencies Unit Tests', function() {
           'npm-package-json-lint': '~0.3.0'
         }
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('prefer-no-version-zero-devDependencies');
       response.lintType.should.equal('error');
@@ -28,7 +28,7 @@ describe('prefer-no-version-zero-devDependencies Unit Tests', function() {
           'gulp-npm-package-json-lint': '^1.0.0'
         }
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -37,7 +37,7 @@ describe('prefer-no-version-zero-devDependencies Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/prefer-tilde-version-dependenciesTest.js b/tests/unit/rules/prefer-tilde-version-dependenciesTest.js
index 2bc47da..f93f17a 100644
--- a/tests/unit/rules/prefer-tilde-version-dependenciesTest.js
+++ b/tests/unit/rules/prefer-tilde-version-dependenciesTest.js
@@ -12,7 +12,7 @@ describe('prefer-tilde-version-dependencies Unit Tests', function() {
           'npm-package-json-lint': '^1.0.0'
         }
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('prefer-tilde-version-dependencies');
       response.lintType.should.equal('error');
@@ -28,7 +28,7 @@ describe('prefer-tilde-version-dependencies Unit Tests', function() {
           'gulp-npm-package-json-lint': '~1.0.0'
         }
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -37,7 +37,7 @@ describe('prefer-tilde-version-dependencies Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/prefer-tilde-version-devDependenciesTest.js b/tests/unit/rules/prefer-tilde-version-devDependenciesTest.js
index becf152..2dd0ca6 100644
--- a/tests/unit/rules/prefer-tilde-version-devDependenciesTest.js
+++ b/tests/unit/rules/prefer-tilde-version-devDependenciesTest.js
@@ -12,7 +12,7 @@ describe('prefer-tilde-version-devDependencies Unit Tests', function() {
           'npm-package-json-lint': '^1.0.0'
         }
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('prefer-tilde-version-devDependencies');
       response.lintType.should.equal('error');
@@ -28,7 +28,7 @@ describe('prefer-tilde-version-devDependencies Unit Tests', function() {
           'gulp-npm-package-json-lint': '~1.0.0'
         }
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -37,7 +37,7 @@ describe('prefer-tilde-version-devDependencies Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/preferGlobal-typeTest.js b/tests/unit/rules/preferGlobal-typeTest.js
index 5a0e418..c33dc1d 100755
--- a/tests/unit/rules/preferGlobal-typeTest.js
+++ b/tests/unit/rules/preferGlobal-typeTest.js
@@ -10,7 +10,7 @@ describe('preferGlobal-type Unit Tests', function() {
       const packageJsonData = {
         preferGlobal: 'string'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('preferGlobal-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('preferGlobal-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/private-typeTest.js b/tests/unit/rules/private-typeTest.js
index 100f312..e569220 100755
--- a/tests/unit/rules/private-typeTest.js
+++ b/tests/unit/rules/private-typeTest.js
@@ -10,7 +10,7 @@ describe('private-type Unit Tests', function() {
       const packageJsonData = {
         private: 'string'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('private-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('private-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/repository-typeTest.js b/tests/unit/rules/repository-typeTest.js
index 136d4d5..4c7fae5 100755
--- a/tests/unit/rules/repository-typeTest.js
+++ b/tests/unit/rules/repository-typeTest.js
@@ -10,7 +10,7 @@ describe('repository-type Unit Tests', function() {
       const packageJsonData = {
         repository: true
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('repository-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('repository-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/author-requiredTest.js b/tests/unit/rules/require-authorTest.js
similarity index 70%
rename from tests/unit/rules/author-requiredTest.js
rename to tests/unit/rules/require-authorTest.js
index ce3583e..26d7e4f 100755
--- a/tests/unit/rules/author-requiredTest.js
+++ b/tests/unit/rules/require-authorTest.js
@@ -2,15 +2,15 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/author-required').lint;
+const lint = requireHelper('rules/require-author').lint;
 
-describe('author-required Unit Tests', function() {
+describe('require-author Unit Tests', function() {
   context('when package.json has node', function() {
     it('true should be returned', function() {
       const packageJsonData = {
         author: 'author'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -19,9 +19,9 @@ describe('author-required Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
-      response.lintId.should.equal('author-required');
+      response.lintId.should.equal('require-author');
       response.lintType.should.equal('error');
       response.node.should.equal('author');
       response.lintMessage.should.equal('author is required');
diff --git a/tests/unit/rules/require-binTest.js b/tests/unit/rules/require-binTest.js
new file mode 100644
index 0000000..7e3d745
--- /dev/null
+++ b/tests/unit/rules/require-binTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-bin').lint;
+
+describe('require-bin Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        bin: 'bin'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-bin');
+      response.lintType.should.equal('error');
+      response.node.should.equal('bin');
+      response.lintMessage.should.equal('bin is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/bugs-recommendedTest.js b/tests/unit/rules/require-bugsTest.js
similarity index 58%
rename from tests/unit/rules/bugs-recommendedTest.js
rename to tests/unit/rules/require-bugsTest.js
index a82635d..db746b6 100755
--- a/tests/unit/rules/bugs-recommendedTest.js
+++ b/tests/unit/rules/require-bugsTest.js
@@ -2,15 +2,15 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/bugs-recommended').lint;
+const lint = requireHelper('rules/require-bugs').lint;
 
-describe('bugs-required Unit Tests', function() {
+describe('require-bugs Unit Tests', function() {
   context('when package.json has node', function() {
     it('true should be returned', function() {
       const packageJsonData = {
         bugs: 'bugs'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -19,12 +19,12 @@ describe('bugs-required Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
-      response.lintId.should.equal('bugs-recommended');
-      response.lintType.should.equal('warning');
+      response.lintId.should.equal('require-bugs');
+      response.lintType.should.equal('error');
       response.node.should.equal('bugs');
-      response.lintMessage.should.equal('bugs is recommended');
+      response.lintMessage.should.equal('bugs is required');
     });
   });
 });
diff --git a/tests/unit/rules/require-bundledDependenciesTest.js b/tests/unit/rules/require-bundledDependenciesTest.js
new file mode 100644
index 0000000..6da2d4d
--- /dev/null
+++ b/tests/unit/rules/require-bundledDependenciesTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-bundledDependencies').lint;
+
+describe('require-bundledDependencies Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        bundledDependencies: 'bundledDependencies'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-bundledDependencies');
+      response.lintType.should.equal('error');
+      response.node.should.equal('bundledDependencies');
+      response.lintMessage.should.equal('bundledDependencies is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/require-configTest.js b/tests/unit/rules/require-configTest.js
new file mode 100644
index 0000000..890fd94
--- /dev/null
+++ b/tests/unit/rules/require-configTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-config').lint;
+
+describe('require-config Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        config: 'config'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-config');
+      response.lintType.should.equal('error');
+      response.node.should.equal('config');
+      response.lintMessage.should.equal('config is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/require-contributorsTest.js b/tests/unit/rules/require-contributorsTest.js
new file mode 100644
index 0000000..c3dc0d8
--- /dev/null
+++ b/tests/unit/rules/require-contributorsTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-contributors').lint;
+
+describe('require-contributors Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        contributors: 'contributors'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-contributors');
+      response.lintType.should.equal('error');
+      response.node.should.equal('contributors');
+      response.lintMessage.should.equal('contributors is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/require-cpuTest.js b/tests/unit/rules/require-cpuTest.js
new file mode 100644
index 0000000..d3c735b
--- /dev/null
+++ b/tests/unit/rules/require-cpuTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-cpu').lint;
+
+describe('require-cpu Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        cpu: 'cpu'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-cpu');
+      response.lintType.should.equal('error');
+      response.node.should.equal('cpu');
+      response.lintMessage.should.equal('cpu is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/require-dependenciesTest.js b/tests/unit/rules/require-dependenciesTest.js
new file mode 100644
index 0000000..3cbb71b
--- /dev/null
+++ b/tests/unit/rules/require-dependenciesTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-dependencies').lint;
+
+describe('require-dependencies Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        dependencies: 'dependencies'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-dependencies');
+      response.lintType.should.equal('error');
+      response.node.should.equal('dependencies');
+      response.lintMessage.should.equal('dependencies is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/description-requiredTest.js b/tests/unit/rules/require-descriptionTest.js
similarity index 69%
rename from tests/unit/rules/description-requiredTest.js
rename to tests/unit/rules/require-descriptionTest.js
index e33a1f0..5c43c38 100755
--- a/tests/unit/rules/description-requiredTest.js
+++ b/tests/unit/rules/require-descriptionTest.js
@@ -2,15 +2,15 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/description-required').lint;
+const lint = requireHelper('rules/require-description').lint;
 
-describe('description-required Unit Tests', function() {
+describe('require-description Unit Tests', function() {
   context('when package.json has node', function() {
     it('true should be returned', function() {
       const packageJsonData = {
         description: 'description'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -19,9 +19,9 @@ describe('description-required Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
-      response.lintId.should.equal('description-required');
+      response.lintId.should.equal('require-description');
       response.lintType.should.equal('error');
       response.node.should.equal('description');
       response.lintMessage.should.equal('description is required');
diff --git a/tests/unit/rules/require-devDependenciesTest.js b/tests/unit/rules/require-devDependenciesTest.js
new file mode 100644
index 0000000..05e5518
--- /dev/null
+++ b/tests/unit/rules/require-devDependenciesTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-devDependencies').lint;
+
+describe('require-devDependencies Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        devDependencies: 'devDependencies'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-devDependencies');
+      response.lintType.should.equal('error');
+      response.node.should.equal('devDependencies');
+      response.lintMessage.should.equal('devDependencies is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/require-directoriesTest.js b/tests/unit/rules/require-directoriesTest.js
new file mode 100644
index 0000000..2d37121
--- /dev/null
+++ b/tests/unit/rules/require-directoriesTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-directories').lint;
+
+describe('require-directories Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        directories: 'directories'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-directories');
+      response.lintType.should.equal('error');
+      response.node.should.equal('directories');
+      response.lintMessage.should.equal('directories is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/engines-requiredTest.js b/tests/unit/rules/require-enginesTest.js
similarity index 70%
rename from tests/unit/rules/engines-requiredTest.js
rename to tests/unit/rules/require-enginesTest.js
index 0bbe812..e802e09 100755
--- a/tests/unit/rules/engines-requiredTest.js
+++ b/tests/unit/rules/require-enginesTest.js
@@ -2,15 +2,15 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/engines-required').lint;
+const lint = requireHelper('rules/require-engines').lint;
 
-describe('engines-required Unit Tests', function() {
+describe('require-engines Unit Tests', function() {
   context('when package.json has node', function() {
     it('true should be returned', function() {
       const packageJsonData = {
         engines: 'engines'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -19,9 +19,9 @@ describe('engines-required Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
-      response.lintId.should.equal('engines-required');
+      response.lintId.should.equal('require-engines');
       response.lintType.should.equal('error');
       response.node.should.equal('engines');
       response.lintMessage.should.equal('engines is required');
diff --git a/tests/unit/rules/require-filesTest.js b/tests/unit/rules/require-filesTest.js
new file mode 100644
index 0000000..8361bbb
--- /dev/null
+++ b/tests/unit/rules/require-filesTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-files').lint;
+
+describe('require-files Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        files: 'files'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-files');
+      response.lintType.should.equal('error');
+      response.node.should.equal('files');
+      response.lintMessage.should.equal('files is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/homepage-recommendedTest.js b/tests/unit/rules/require-homepageTest.js
similarity index 58%
rename from tests/unit/rules/homepage-recommendedTest.js
rename to tests/unit/rules/require-homepageTest.js
index c380906..f7ffb45 100755
--- a/tests/unit/rules/homepage-recommendedTest.js
+++ b/tests/unit/rules/require-homepageTest.js
@@ -2,15 +2,15 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/homepage-recommended').lint;
+const lint = requireHelper('rules/require-homepage').lint;
 
-describe('homepage-recommended Unit Tests', function() {
+describe('require-homepage Unit Tests', function() {
   context('when package.json has node', function() {
     it('true should be returned', function() {
       const packageJsonData = {
         homepage: 'homepage'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -19,12 +19,12 @@ describe('homepage-recommended Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
-      response.lintId.should.equal('homepage-recommended');
-      response.lintType.should.equal('warning');
+      response.lintId.should.equal('require-homepage');
+      response.lintType.should.equal('error');
       response.node.should.equal('homepage');
-      response.lintMessage.should.equal('homepage is recommended');
+      response.lintMessage.should.equal('homepage is required');
     });
   });
 });
diff --git a/tests/unit/rules/keywords-recommendedTest.js b/tests/unit/rules/require-keywordsTest.js
similarity index 58%
rename from tests/unit/rules/keywords-recommendedTest.js
rename to tests/unit/rules/require-keywordsTest.js
index 9172faf..65088dc 100755
--- a/tests/unit/rules/keywords-recommendedTest.js
+++ b/tests/unit/rules/require-keywordsTest.js
@@ -2,15 +2,15 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/keywords-recommended').lint;
+const lint = requireHelper('rules/require-keywords').lint;
 
-describe('keywords-recommended Unit Tests', function() {
+describe('require-keywords Unit Tests', function() {
   context('when package.json has node', function() {
     it('true should be returned', function() {
       const packageJsonData = {
         keywords: 'keywords'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -19,12 +19,12 @@ describe('keywords-recommended Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
-      response.lintId.should.equal('keywords-recommended');
-      response.lintType.should.equal('warning');
+      response.lintId.should.equal('require-keywords');
+      response.lintType.should.equal('error');
       response.node.should.equal('keywords');
-      response.lintMessage.should.equal('keywords is recommended');
+      response.lintMessage.should.equal('keywords is required');
     });
   });
 });
diff --git a/tests/unit/rules/license-requiredTest.js b/tests/unit/rules/require-licenseTest.js
similarity index 70%
rename from tests/unit/rules/license-requiredTest.js
rename to tests/unit/rules/require-licenseTest.js
index 5ab89df..987cafa 100755
--- a/tests/unit/rules/license-requiredTest.js
+++ b/tests/unit/rules/require-licenseTest.js
@@ -2,15 +2,15 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/license-required').lint;
+const lint = requireHelper('rules/require-license').lint;
 
-describe('license-required Unit Tests', function() {
+describe('require-license Unit Tests', function() {
   context('when package.json has node', function() {
     it('true should be returned', function() {
       const packageJsonData = {
         license: 'license'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -19,9 +19,9 @@ describe('license-required Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
-      response.lintId.should.equal('license-required');
+      response.lintId.should.equal('require-license');
       response.lintType.should.equal('error');
       response.node.should.equal('license');
       response.lintMessage.should.equal('license is required');
diff --git a/tests/unit/rules/require-mainTest.js b/tests/unit/rules/require-mainTest.js
new file mode 100644
index 0000000..7b4e36a
--- /dev/null
+++ b/tests/unit/rules/require-mainTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-main').lint;
+
+describe('require-main Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        main: 'main'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-main');
+      response.lintType.should.equal('error');
+      response.node.should.equal('main');
+      response.lintMessage.should.equal('main is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/require-manTest.js b/tests/unit/rules/require-manTest.js
new file mode 100644
index 0000000..7bee826
--- /dev/null
+++ b/tests/unit/rules/require-manTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-man').lint;
+
+describe('require-man Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        man: 'man'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-man');
+      response.lintType.should.equal('error');
+      response.node.should.equal('man');
+      response.lintMessage.should.equal('man is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/name-requiredTest.js b/tests/unit/rules/require-nameTest.js
similarity index 70%
rename from tests/unit/rules/name-requiredTest.js
rename to tests/unit/rules/require-nameTest.js
index 39eb786..da2bf9b 100755
--- a/tests/unit/rules/name-requiredTest.js
+++ b/tests/unit/rules/require-nameTest.js
@@ -2,15 +2,15 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/name-required').lint;
+const lint = requireHelper('rules/require-name').lint;
 
-describe('name-required Unit Tests', function() {
+describe('require-name Unit Tests', function() {
   context('when package.json has node', function() {
     it('true should be returned', function() {
       const packageJsonData = {
         name: 'name'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -19,9 +19,9 @@ describe('name-required Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
-      response.lintId.should.equal('name-required');
+      response.lintId.should.equal('require-name');
       response.lintType.should.equal('error');
       response.node.should.equal('name');
       response.lintMessage.should.equal('name is required');
diff --git a/tests/unit/rules/require-optionalDependenciesTest.js b/tests/unit/rules/require-optionalDependenciesTest.js
new file mode 100644
index 0000000..699cc57
--- /dev/null
+++ b/tests/unit/rules/require-optionalDependenciesTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-optionalDependencies').lint;
+
+describe('require-optionalDependencies Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        optionalDependencies: 'optionalDependencies'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-optionalDependencies');
+      response.lintType.should.equal('error');
+      response.node.should.equal('optionalDependencies');
+      response.lintMessage.should.equal('optionalDependencies is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/require-osTest.js b/tests/unit/rules/require-osTest.js
new file mode 100644
index 0000000..7eaad16
--- /dev/null
+++ b/tests/unit/rules/require-osTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-os').lint;
+
+describe('require-os Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        os: 'os'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-os');
+      response.lintType.should.equal('error');
+      response.node.should.equal('os');
+      response.lintMessage.should.equal('os is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/require-peerDependenciesTest.js b/tests/unit/rules/require-peerDependenciesTest.js
new file mode 100644
index 0000000..accbf5a
--- /dev/null
+++ b/tests/unit/rules/require-peerDependenciesTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-peerDependencies').lint;
+
+describe('require-peerDependencies Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        peerDependencies: 'peerDependencies'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-peerDependencies');
+      response.lintType.should.equal('error');
+      response.node.should.equal('peerDependencies');
+      response.lintMessage.should.equal('peerDependencies is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/require-preferGlobalTest.js b/tests/unit/rules/require-preferGlobalTest.js
new file mode 100644
index 0000000..87a50af
--- /dev/null
+++ b/tests/unit/rules/require-preferGlobalTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-preferGlobal').lint;
+
+describe('require-preferGlobal Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        preferGlobal: 'preferGlobal'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-preferGlobal');
+      response.lintType.should.equal('error');
+      response.node.should.equal('preferGlobal');
+      response.lintMessage.should.equal('preferGlobal is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/require-privateTest.js b/tests/unit/rules/require-privateTest.js
new file mode 100644
index 0000000..f086ccc
--- /dev/null
+++ b/tests/unit/rules/require-privateTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-private').lint;
+
+describe('require-private Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        private: 'private'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-private');
+      response.lintType.should.equal('error');
+      response.node.should.equal('private');
+      response.lintMessage.should.equal('private is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/require-publishConfigTest.js b/tests/unit/rules/require-publishConfigTest.js
new file mode 100644
index 0000000..0140491
--- /dev/null
+++ b/tests/unit/rules/require-publishConfigTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-publishConfig').lint;
+
+describe('require-publishConfig Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        publishConfig: 'publishConfig'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-publishConfig');
+      response.lintType.should.equal('error');
+      response.node.should.equal('publishConfig');
+      response.lintMessage.should.equal('publishConfig is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/repository-requiredTest.js b/tests/unit/rules/require-repositoryTest.js
similarity index 70%
rename from tests/unit/rules/repository-requiredTest.js
rename to tests/unit/rules/require-repositoryTest.js
index 3c02fa1..2b09c6a 100755
--- a/tests/unit/rules/repository-requiredTest.js
+++ b/tests/unit/rules/require-repositoryTest.js
@@ -2,15 +2,15 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/repository-required').lint;
+const lint = requireHelper('rules/require-repository').lint;
 
-describe('repository-required Unit Tests', function() {
+describe('require-repository Unit Tests', function() {
   context('when package.json has node', function() {
     it('true should be returned', function() {
       const packageJsonData = {
         repository: 'repository'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -19,9 +19,9 @@ describe('repository-required Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
-      response.lintId.should.equal('repository-required');
+      response.lintId.should.equal('require-repository');
       response.lintType.should.equal('error');
       response.node.should.equal('repository');
       response.lintMessage.should.equal('repository is required');
diff --git a/tests/unit/rules/require-scriptsTest.js b/tests/unit/rules/require-scriptsTest.js
new file mode 100644
index 0000000..8599105
--- /dev/null
+++ b/tests/unit/rules/require-scriptsTest.js
@@ -0,0 +1,30 @@
+'use strict';
+
+const should = require('should');
+const requireHelper = require('../../require_helper');
+const lint = requireHelper('rules/require-scripts').lint;
+
+describe('require-scripts Unit Tests', function() {
+  context('when package.json has node', function() {
+    it('true should be returned', function() {
+      const packageJsonData = {
+        scripts: 'scripts'
+      };
+      const response = lint(packageJsonData, 'error');
+
+      response.should.be.true();
+    });
+  });
+
+  context('when package.json does not have node', function() {
+    it('LintIssue object should be returned', function() {
+      const packageJsonData = {};
+      const response = lint(packageJsonData, 'error');
+
+      response.lintId.should.equal('require-scripts');
+      response.lintType.should.equal('error');
+      response.node.should.equal('scripts');
+      response.lintMessage.should.equal('scripts is required');
+    });
+  });
+});
diff --git a/tests/unit/rules/version-requiredTest.js b/tests/unit/rules/require-versionTest.js
similarity index 70%
rename from tests/unit/rules/version-requiredTest.js
rename to tests/unit/rules/require-versionTest.js
index 524e8a8..5b82715 100755
--- a/tests/unit/rules/version-requiredTest.js
+++ b/tests/unit/rules/require-versionTest.js
@@ -2,15 +2,15 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/version-required').lint;
+const lint = requireHelper('rules/require-version').lint;
 
-describe('version-required Unit Tests', function() {
+describe('require-version Unit Tests', function() {
   context('when package.json has node', function() {
     it('true should be returned', function() {
       const packageJsonData = {
         version: 'version'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -19,9 +19,9 @@ describe('version-required Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
-      response.lintId.should.equal('version-required');
+      response.lintId.should.equal('require-version');
       response.lintType.should.equal('error');
       response.node.should.equal('version');
       response.lintMessage.should.equal('version is required');
diff --git a/tests/unit/rules/scripts-typeTest.js b/tests/unit/rules/scripts-typeTest.js
index 8d50c06..841c097 100755
--- a/tests/unit/rules/scripts-typeTest.js
+++ b/tests/unit/rules/scripts-typeTest.js
@@ -10,7 +10,7 @@ describe('scripts-type Unit Tests', function() {
       const packageJsonData = {
         scripts: 'scripts'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('scripts-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('scripts-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/author-valid-valuesTest.js b/tests/unit/rules/valid-values-authorTest.js
similarity index 77%
rename from tests/unit/rules/author-valid-valuesTest.js
rename to tests/unit/rules/valid-values-authorTest.js
index 8b8ab1d..ba5c71d 100755
--- a/tests/unit/rules/author-valid-valuesTest.js
+++ b/tests/unit/rules/valid-values-authorTest.js
@@ -2,9 +2,9 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/author-valid-values').lint;
+const lint = requireHelper('rules/valid-values-author').lint;
 
-describe('author-valid-values Unit Tests', function() {
+describe('valid-values-author Unit Tests', function() {
   context('when package.json has node with invalid value', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {
@@ -14,9 +14,9 @@ describe('author-valid-values Unit Tests', function() {
         'FirstName LastName',
         'FirstName MiddleName LastName'
       ];
-      const response = lint(packageJsonData, validValues);
+      const response = lint(packageJsonData, 'error', validValues);
 
-      response.lintId.should.equal('author-valid-values');
+      response.lintId.should.equal('valid-values-author');
       response.lintType.should.equal('error');
       response.node.should.equal('author');
       response.lintMessage.should.equal('Invalid value for author');
@@ -33,7 +33,7 @@ describe('author-valid-values Unit Tests', function() {
         'FirstName MiddleName LastName',
         'LastName, FirstName'
       ];
-      const response = lint(packageJsonData, validValues);
+      const response = lint(packageJsonData, 'error', validValues);
 
       response.should.be.true();
     });
@@ -47,7 +47,7 @@ describe('author-valid-values Unit Tests', function() {
         'FirstName MiddleName LastName',
         'LastName, FirstName'
       ];
-      const response = lint(packageJsonData, validValues);
+      const response = lint(packageJsonData, 'error', validValues);
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/private-valid-valuesTest.js b/tests/unit/rules/valid-values-privateTest.js
similarity index 73%
rename from tests/unit/rules/private-valid-valuesTest.js
rename to tests/unit/rules/valid-values-privateTest.js
index 091161a..a9f7513 100755
--- a/tests/unit/rules/private-valid-valuesTest.js
+++ b/tests/unit/rules/valid-values-privateTest.js
@@ -2,9 +2,9 @@
 
 const should = require('should');
 const requireHelper = require('../../require_helper');
-const lint = requireHelper('rules/private-valid-values').lint;
+const lint = requireHelper('rules/valid-values-private').lint;
 
-describe('private-valid-values Unit Tests', function() {
+describe('valid-values-private Unit Tests', function() {
   context('when package.json has node with incorrect format', function() {
     it('LintIssue object should be returned', function() {
       const packageJsonData = {
@@ -13,9 +13,9 @@ describe('private-valid-values Unit Tests', function() {
       const validValues = [
         false
       ];
-      const response = lint(packageJsonData, validValues);
+      const response = lint(packageJsonData, 'error', validValues);
 
-      response.lintId.should.equal('private-valid-values');
+      response.lintId.should.equal('valid-values-private');
       response.lintType.should.equal('error');
       response.node.should.equal('private');
       response.lintMessage.should.equal('Invalid value for private');
@@ -30,7 +30,7 @@ describe('private-valid-values Unit Tests', function() {
       const validValues = [
         false
       ];
-      const response = lint(packageJsonData, validValues);
+      const response = lint(packageJsonData, 'error', validValues);
 
       response.should.be.true();
     });
@@ -39,7 +39,7 @@ describe('private-valid-values Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/version-formatTest.js b/tests/unit/rules/version-formatTest.js
index a472e59..9c79949 100755
--- a/tests/unit/rules/version-formatTest.js
+++ b/tests/unit/rules/version-formatTest.js
@@ -10,7 +10,7 @@ describe('version-format Unit Tests', function() {
       const packageJsonData = {
         version: '1.a.0'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('version-format');
       response.lintType.should.equal('error');
@@ -24,7 +24,7 @@ describe('version-format Unit Tests', function() {
       const packageJsonData = {
         version: '1.0.0'
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
@@ -33,7 +33,7 @@ describe('version-format Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });
diff --git a/tests/unit/rules/version-typeTest.js b/tests/unit/rules/version-typeTest.js
index 61d3b43..ddede35 100755
--- a/tests/unit/rules/version-typeTest.js
+++ b/tests/unit/rules/version-typeTest.js
@@ -10,7 +10,7 @@ describe('version-type Unit Tests', function() {
       const packageJsonData = {
         version: true
       };
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.lintId.should.equal('version-type');
       response.lintType.should.equal('error');
@@ -22,7 +22,7 @@ describe('version-type Unit Tests', function() {
   context('when package.json does not have node', function() {
     it('true should be returned', function() {
       const packageJsonData = {};
-      const response = lint(packageJsonData);
+      const response = lint(packageJsonData, 'error');
 
       response.should.be.true();
     });