/
jshint.js
124 lines (101 loc) · 3.09 KB
/
jshint.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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
"use strict";
var JSHINT = require('jshint').JSHINT;
/**
* @class LintRoller.linters.JSHint
*
* Created automatically if a { type : 'jsHint' } config is passed to the linters array.
*/
var linter = {
/**
* @property
* JSHint
*/
lib : JSHINT,
/**
* @cfg
* An object containing lint validation options
*/
options : {
},
/**
* @cfg
* An object containing the pre-defined globals of the lint validation options
*/
globals : {
},
/**
* @private
*/
applyLintOptions : function (options) {
var i;
if (!options) {
return false;
}
for (i in options) {
if (options.hasOwnProperty(i)) {
if (i === 'globals') {
this.globals = options[i];
}
else {
this.options[i] = options[i];
}
}
}
},
/**
* @private
*/
runLinter : function (parentModule, callback) {
var me = this,
errorList = [],
fileMatch = /\.js$/i,
js;
parentModule.log('Running JSHint against code...', false);
parentModule.async.each(
parentModule.files,
function (file, next) {
/*
* JSHint cannot handle HTML fragments
* https://github.com/jshint/jshint/issues/215
*/
if (!fileMatch.test(file)) {
parentModule.log('JSHint cannot handle HTML input. File: ' + file, false);
}
else {
js = parentModule.fs.readFileSync(file, 'utf8');
var i = 0,
result = me.lib(js, me.options, me.globals),
totalErrors = me.lib.errors.length,
error;
if (!result) {
for (i; i < totalErrors; i++) {
error = me.lib.errors[i];
if (error) {
errorList.push({
file : file,
line : error.line,
character : error.character,
reason : error.reason
});
if (parentModule.stopOnFirstError) {
break;
}
}
}
if (parentModule.stopOnFirstError && errorList.length > 0) {
next(true);
}
}
}
next(null);
},
function (e) {
if (e && parentModule.stopOnFirstError && errorList.length > 0) {
parentModule.announceErrors(errorList);
}
callback(errorList);
}
);
}
};
module.exports = linter;