Skip to content

Commit

Permalink
Show validation error source in warning
Browse files Browse the repository at this point in the history
  • Loading branch information
btmills committed Apr 7, 2015
1 parent 212cff7 commit 01f7048
Show file tree
Hide file tree
Showing 28 changed files with 41 additions and 48 deletions.
2 changes: 1 addition & 1 deletion conf/eslint.json
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,6 @@
"vars-on-top": 0,
"wrap-iife": 0,
"wrap-regex": 0,
"yoda": [2, "never"]
"yoda": [2, "never", { "exceptRange": true }]
}
}
7 changes: 6 additions & 1 deletion lib/cli-engine.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ var fs = require("fs"),
traverse = require("./util/traverse"),
IgnoredPaths = require("./ignored-paths"),
Config = require("./config"),
util = require("./util");
util = require("./util"),
validate = require("./validate-options");

//------------------------------------------------------------------------------
// Typedefs
Expand Down Expand Up @@ -262,6 +263,10 @@ function CLIEngine(options) {
}

loadPlugins(this.options.plugins);

Object.keys(this.options.rules || {}).forEach(function(name) {
validate(name, this.options.rules[name], "CLI");
}.bind(this));
}

CLIEngine.prototype = {
Expand Down
15 changes: 7 additions & 8 deletions lib/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,18 +11,17 @@
// Requirements
//------------------------------------------------------------------------------

var assign = require("object-assign"),
debug = require("debug"),
var fs = require("fs"),
path = require("path"),
environments = require("../conf/environments"),
util = require("./util"),
FileFinder = require("./file-finder"),
fs = require("fs"),
path = require("path"),
rules = require('./rules'),
stripComments = require("strip-json-comments"),
assign = require("object-assign"),
debug = require("debug"),
yaml = require("js-yaml"),
userHome = require("user-home"),
util = require("./util"),
validate = require("./validate-options"),
yaml = require("js-yaml");
validate = require("./validate-options");

//------------------------------------------------------------------------------
// Constants
Expand Down
25 changes: 14 additions & 11 deletions lib/eslint.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,18 @@
// Requirements
//------------------------------------------------------------------------------

var estraverse = require("estraverse-fb"),
escope = require("escope"),
var assign = require("object-assign"),
createTokenStore = require("./token-store.js"),
environments = require("../conf/environments"),
assign = require("object-assign"),
rules = require("./rules"),
util = require("./util"),
escapeRegExp = require("escape-string-regexp"),
escope = require("escope"),
estraverse = require("estraverse-fb"),
EventEmitter = require("events").EventEmitter,
RuleContext = require("./rule-context"),
rules = require("./rules"),
timing = require("./timing"),
createTokenStore = require("./token-store.js"),
EventEmitter = require("events").EventEmitter,
escapeRegExp = require("escape-string-regexp");
util = require("./util"),
validate = require("./validate-options");

//------------------------------------------------------------------------------
// Helpers
Expand Down Expand Up @@ -247,13 +248,14 @@ function enableReporting(reportingConfig, start, rulesToEnable) {
* Parses comments in file to extract file-specific config of rules, globals
* and environments and merges them with global config; also code blocks
* where reporting is disabled or enabled and merges them with reporting config.
* @param {string} filename The file being checked.
* @param {ASTNode} ast The top node of the AST.
* @param {Object} config The existing configuration data.
* @param {Object[]} reportingConfig The existing reporting configuration data.
* @param {Object[]} messages The messages queue.
* @returns {void}
*/
function modifyConfigsFromComments(ast, config, reportingConfig, messages) {
function modifyConfigsFromComments(filename, ast, config, reportingConfig, messages) {

var commentConfig = {
astGlobals: {},
Expand Down Expand Up @@ -294,6 +296,7 @@ function modifyConfigsFromComments(ast, config, reportingConfig, messages) {
Object.keys(items).forEach(function(name) {
var ruleValue = items[name];
if (typeof ruleValue === "number" || (Array.isArray(ruleValue) && typeof ruleValue[0] === "number")) {
validate(name, ruleValue, filename + " line " + comment.loc.start.line);
commentRules[name] = ruleValue;
}
});
Expand Down Expand Up @@ -622,7 +625,7 @@ module.exports = (function() {
currentAST = ast;

// parse global comments and modify config
modifyConfigsFromComments(ast, config, reportingConfig, messages);
modifyConfigsFromComments(filename, ast, config, reportingConfig, messages);

// enable appropriate rules
Object.keys(config.rules).filter(function(key) {
Expand All @@ -632,7 +635,7 @@ module.exports = (function() {
var ruleCreator = rules.get(key),
severity = getRuleSeverity(config.rules[key]),
options = getRuleOptions(config.rules[key]),
rule, valid;
rule;

if (ruleCreator) {
try {
Expand Down
1 change: 0 additions & 1 deletion lib/rules/brace-style.js
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "string",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/camelcase.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "object",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/comma-dangle.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ module.exports = function (context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "string",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/comma-spacing.js
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "object",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/curly.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "string",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/dot-notation.js
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "object",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/eqeqeq.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "string",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/key-spacing.js
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "object",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/max-len.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "integer",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/new-cap.js
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "object",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/no-cond-assign.js
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "string",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/no-inner-declarations.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "string",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/no-mixed-spaces-and-tabs.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"enum": ["smart-tabs", true, false]
Expand Down
1 change: 0 additions & 1 deletion lib/rules/no-multi-spaces.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "object",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/no-unused-vars.js
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"oneOf": [
Expand Down
1 change: 0 additions & 1 deletion lib/rules/no-use-before-define.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"enum": ["nofunc"]
Expand Down
1 change: 0 additions & 1 deletion lib/rules/quotes.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "string",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/semi-spacing.js
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,6 @@ module.exports = function (context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "object",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/semi.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"enum": ["always", "never"]
Expand Down
1 change: 0 additions & 1 deletion lib/rules/space-infix-ops.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "object",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/space-unary-ops.js
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "object",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/strict.js
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,6 @@ module.exports = function(context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "string",
Expand Down
1 change: 0 additions & 1 deletion lib/rules/yoda.js
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,6 @@ module.exports = function (context) {
};

module.exports.schema = {
"type": "array",
"items": [
{
"type": "string",
Expand Down
17 changes: 13 additions & 4 deletions lib/validate-options.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,16 @@

"use strict";

var rules = require('./rules'),
var rules = require("./rules"),
validator = require("is-my-json-valid");

var validators = Object.create(null); // Cache generated schema validators

/**
* Converts a rule's exported, abbreviated schema into a full schema.
* @param {object} options Exported schema from a rule.
* @returns {object} Full schema ready for validation.
*/
function makeSchema(options) {
if (!options) {
return {
Expand All @@ -20,7 +25,7 @@ function makeSchema(options) {
"enum": [0, 1, 2]
}
],
"minItems": 1,
"minItems": 1
};
}

Expand Down Expand Up @@ -55,14 +60,18 @@ module.exports = function (id, config, source) {
].join(""));
}

if (typeof config === "number") {
return;
}

validate = validators[id];
if (!validate) {
rule = rules.get(id);
validate = validator(makeSchema(rule.schema), { verbose: true });
validators[id] = validate;
}

validate(config.slice(1));
validate(config);

if (validate.errors) {
message = [
Expand All @@ -71,7 +80,7 @@ module.exports = function (id, config, source) {
];
validate.errors.forEach(function (error) {
message.push(
"\tValue ", error.value, " ", error.message, ".\n"
"\tValue \"", error.value, "\" ", error.message, ".\n"
);
});

Expand Down

0 comments on commit 01f7048

Please sign in to comment.