-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
87 lines (67 loc) · 2.45 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
exports.summary = 'Validate javascript files with jshint';
exports.usage = '<src> [options]';
exports.options = {
"globals" : {
describe: "pre-define global variables that are exposed"
},
"charset" : {
alias : 'c'
,default : 'utf-8'
,describe : 'file encoding type'
}
};
exports.run = function (options) {
var charset = options.charset;
var globals = options.globals;
// delete these avoid jshint report Bad option warning
delete options._;
delete options.charset;
delete options.c;
delete options.$0;
delete options.src;
exports.files.forEach(function(inputFile){
exports.jshint(inputFile, options, globals, charset);
});
};
exports.jshint = function(inputFile, options, globals, charset){
var jshint = require('jshint').JSHINT;
var input = exports.file.read(inputFile, charset);
// skip empty files
if (input.length) {
exports.log("Linting " + inputFile + "...");
var result = jshint(input, options, globals || {});
if (result) {
// Success!
exports.log("No errors");
} else {
// Something went wrong.
// Iterate over all errors.
jshint.errors.forEach(function(e) {
// Sometimes there's no error object.
if (!e) { return; }
var pos;
var evidence = e.evidence;
var character = e.character;
if (evidence) {
if (character > evidence.length) {
// End of line.
evidence = evidence + ' '.inverse.red;
} else {
// Middle of line.
evidence = evidence.slice(0, character - 1) + evidence[character - 1].inverse.red +
evidence.slice(character);
}
// Descriptive code error.
pos = '['.red + ('L' + e.line).yellow + ':'.red + ('C' + character).yellow + ']'.red;
exports.warn(pos + " " + evidence +'\n' + e.reason);
} else {
// Generic "Whoops, too many errors" error.
exports.warn(e.reason);
}
});
exports.log(inputFile.grey, 'has', jshint.errors.length, "warnings" )
}
} else {
exports.log("Skipping empty file " + inputFile);
}
};