eslint
Advanced tools
Comparing version 0.0.4 to 0.0.5
{ | ||
"rules": { | ||
"no-alert": 1, | ||
"no-arg": 1, | ||
"no-bitwise": 0, | ||
"no-console": 1, | ||
@@ -6,0 +8,0 @@ "no-debugger": 1, |
@@ -12,3 +12,3 @@ /** | ||
var optimist = require("optimist"), | ||
var options = require("./options"), | ||
fs = require("fs"), | ||
@@ -76,2 +76,6 @@ path = require("path"), | ||
/** | ||
* | ||
* @returns {int} The total number of errors. | ||
*/ | ||
function processFile(filename, config) { | ||
@@ -86,4 +90,16 @@ | ||
console.log(reporter(eslint, messages, filename, config)); | ||
return messages.reduce(function(previous, message) { | ||
if (message.fatal || config.rules[message.ruleId] === 2) { | ||
return previous + 1; | ||
} else { | ||
return previous; | ||
} | ||
}, 0); | ||
} | ||
/** | ||
* | ||
* @returns {int} The total number of errors. | ||
*/ | ||
function processFiles(files, config) { | ||
@@ -101,5 +117,5 @@ | ||
fullFileList.forEach(function(file) { | ||
processFile(file, config); | ||
}); | ||
return fullFileList.reduce(function(previous, file) { | ||
return previous + processFile(file, config); | ||
}, 0); | ||
} | ||
@@ -126,24 +142,25 @@ | ||
var options = optimist.parse(argv), | ||
files = options._, | ||
config; | ||
var currentOptions = options.parse(argv), | ||
files = currentOptions._, | ||
config, | ||
result; | ||
if (options.h || options.help) { | ||
if (currentOptions.h || !files.length) { | ||
options.help(); | ||
} else { | ||
config = readConfig(options); | ||
config = readConfig(currentOptions); | ||
// TODO: Figure out correct option vs. config for this | ||
// load rules | ||
if (options.rules) { | ||
rules.load(options.rules); | ||
if (currentOptions.rulesdir) { | ||
rules.load(currentOptions.rulesdir); | ||
} | ||
if (files.length) { | ||
processFiles(files, config); | ||
} else { | ||
console.log("No files!"); | ||
result = processFiles(files, config); | ||
// result is the number of errors (not warnings) | ||
if (result > 0) { | ||
process.exit(1); | ||
} | ||
} | ||
@@ -150,0 +167,0 @@ |
@@ -12,5 +12,5 @@ /** | ||
var astw = require("astw"), | ||
util = require("util"), | ||
var util = require("util"), | ||
esprima = require("esprima"), | ||
estraverse = require("estraverse"), | ||
rules = require("./rules"), | ||
@@ -55,3 +55,5 @@ RuleContext = require("./rule-context"), | ||
// enable appropriate rules | ||
Object.keys(config.rules).forEach(function(key) { | ||
Object.keys(config.rules).filter(function(key) { | ||
return config.rules[key] > 0; // ignore rules that are turned off | ||
}).forEach(function(key) { | ||
@@ -82,9 +84,32 @@ var ruleCreator = rules.get(key), | ||
*/ | ||
var ast = esprima.parse(text, { loc: true, range: true }), | ||
walk = astw(ast); | ||
try { | ||
var ast = esprima.parse(text, { loc: true, range: true }); | ||
estraverse.traverse(ast, { | ||
enter: function(node) { | ||
api.emit(node.type, node); | ||
}, | ||
leave: function(node) { | ||
api.emit(node.type + ":after", node); | ||
} | ||
}); | ||
walk(function(node) { | ||
api.emit(node.type, node); | ||
}); | ||
} catch (ex) { | ||
messages.push({ | ||
fatal: true, | ||
// messages come as "Line X: Unexpected token foo", so strip off leading part | ||
message: ex.message.substring(ex.message.indexOf(":") + 1).trim(), | ||
// fake AST node to make life easier for reporters | ||
node: { | ||
loc: { | ||
start: { | ||
line: ex.lineNumber, | ||
column: ex.column | ||
} | ||
} | ||
} | ||
}); | ||
} | ||
return messages; | ||
@@ -101,2 +126,3 @@ }; | ||
api.report = function(ruleId, node, message) { | ||
messages.push({ | ||
@@ -103,0 +129,0 @@ ruleId: ruleId, |
@@ -14,6 +14,6 @@ /** | ||
if (config.rules[message.ruleId] < 2) { | ||
if (message.fatal || config.rules[message.ruleId] === 2) { | ||
return "Error"; | ||
} else { | ||
return "Warning"; | ||
} else { | ||
return "Error"; | ||
} | ||
@@ -35,5 +35,10 @@ | ||
output += filename + ": line " + message.node.loc.start.line + ", col " + | ||
message.node.loc.start.column + ", " + getMessageType(message, config) + | ||
" - " + message.message + "\n"; | ||
output += filename + ": "; | ||
if (message.node) { | ||
output += "line " + message.node.loc.start.line + ", col " + | ||
message.node.loc.start.column + ", " + getMessageType(message, config); | ||
} | ||
output += " - " + message.message + "\n"; | ||
}); | ||
@@ -40,0 +45,0 @@ |
@@ -17,2 +17,8 @@ /** | ||
//------------------------------------------------------------------------------ | ||
// Constants | ||
//------------------------------------------------------------------------------ | ||
var JS_EXT = ".js"; | ||
//------------------------------------------------------------------------------ | ||
// Privates | ||
@@ -30,8 +36,8 @@ //------------------------------------------------------------------------------ | ||
try { | ||
var fullPath = path.join(__dirname, directory), | ||
var fullPath = path.resolve(process.cwd(), directory), | ||
files = fs.readdirSync(fullPath); | ||
files.forEach(function(file) { | ||
if (path.extname(file) === ".js") { | ||
var ruleId = file.replace(".js", ""); | ||
if (path.extname(file) === JS_EXT) { | ||
var ruleId = file.replace(JS_EXT, ""); | ||
rules[ruleId] = require(path.join(fullPath, ruleId)); | ||
@@ -55,2 +61,3 @@ } | ||
exports.load("./rules"); | ||
// loads built-in rules | ||
exports.load(path.join(__dirname, "./rules")); |
{ | ||
"name": "eslint", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"author": "Nicholas C. Zakas <nicholas+npm@nczconsulting.com>", | ||
@@ -20,3 +20,3 @@ "description": "An Esprima-based pattern checker for JavaScript.", | ||
"optimist": "*", | ||
"astw": "*", | ||
"estraverse": "*", | ||
"esprima": "*", | ||
@@ -23,0 +23,0 @@ "jshint": "*" |
@@ -11,2 +11,8 @@ [![Build Status](https://secure.travis-ci.org/nzakas/eslint.png?branch=master)](http://travis-ci.org/nzakas/eslint) | ||
## WARNING: Pre-alpha | ||
Right now, ESLint is in early development and should not be relied upon. There are no guarantees that anything is working at any particular point in time. Installing directly from GitHub increases the likelihood that something will explode, so if you'd like to try it out, please install the official release from npm. | ||
Prior to version 0.1.0, this utility should be considered completely unstable. | ||
## Installation | ||
@@ -13,0 +19,0 @@ |
Floating dependency
QualityPackage has a dependency with a floating version range. This can cause issues if the dependency publishes a new major version.
Found 1 instance in 1 package
Floating dependency
QualityPackage has a dependency with a floating version range. This can cause issues if the dependency publishes a new major version.
Found 1 instance in 1 package
72265
39
1661
35
+ Addedestraverse@*
+ Addedestraverse@5.3.0(transitive)
- Removedastw@*
- Removedacorn@4.0.13(transitive)
- Removedastw@2.2.0(transitive)