-
Notifications
You must be signed in to change notification settings - Fork 12
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
0d76274
commit 3b583ef
Showing
3 changed files
with
100 additions
and
33 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
{ | ||
"predef": [ | ||
"document", | ||
"module", | ||
"require", | ||
"__dirname", | ||
"process", | ||
"console", | ||
"it", | ||
"xit", | ||
"describe", | ||
"xdescribe", | ||
"before", | ||
"beforeEach", | ||
"after", | ||
"afterEach" | ||
], | ||
|
||
"node": true, | ||
"es5": true, | ||
"bitwise": true, | ||
"curly": true, | ||
"eqeqeq": true, | ||
"forin": false, | ||
"immed": true, | ||
"latedef": true, | ||
"newcap": true, | ||
"noarg": true, | ||
"noempty": true, | ||
"nonew": true, | ||
"plusplus": false, | ||
"undef": true, | ||
"strict": false, | ||
"trailing": false, | ||
"globalstrict": true, | ||
"nonstandard": true, | ||
"white": false, | ||
"indent": 2, | ||
"expr": true, | ||
"multistr": true, | ||
"onevar": false, | ||
"unused": "vars", | ||
"sub": true | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,46 +1,69 @@ | ||
var walk = require("walkdo"); | ||
var Walker = require("iwalk"); | ||
var fs = require("fs"); | ||
var path = require("path"); | ||
var checkBOM = function (source) { | ||
var file = fs.openSync(source, "r"); | ||
var buffer = new Buffer(3); | ||
fs.readSync(file, buffer, 0, 3); | ||
//读取buffer的前三位,读不到会跳出try,读到BOM则返回true,其他情况都会返回false | ||
if (buffer[0] == 0xef && buffer[1] == 0xbb && buffer[2] == 0xbf) { | ||
return true; | ||
} | ||
return false; | ||
var Bagpipe = require('bagpipe'); | ||
var piper = new Bagpipe(20); | ||
|
||
var checkBOM = function (source, callback) { | ||
fs.open(source, "r", function (err, fd) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
var buffer = new Buffer(3); | ||
fs.read(fd, buffer, 0, 3, 0, function (err, bytesRead, buffer) { | ||
if (err) { | ||
return callback(err); | ||
} | ||
// 读取buffer的前三位,读不到会跳出try,读到BOM则返回true,其他情况都会返回false | ||
var isBOM = (buffer[0] === 0xef && buffer[1] === 0xbb && buffer[2] === 0xbf); | ||
// 记得关闭 | ||
fs.close(fd, function (err) { | ||
callback(err, isBOM); | ||
}); | ||
}); | ||
}); | ||
}; | ||
|
||
//黑名单 | ||
var sep = path.sep.replace('\\', '\\\\').replace('/', '\/');//跨平台 | ||
var blackList = [ | ||
sep + "doc" + sep, | ||
sep + ".git" + sep, | ||
sep + ".svn" + sep, | ||
sep + "node_modules" + sep | ||
var ignores = [ | ||
"doc", | ||
".git", | ||
".svn", | ||
"node_modules" | ||
]; | ||
var blackListReg = new RegExp(blackList.join("|")); | ||
|
||
exports.rule = "文件utf-8 without BOM检测。查出非utf8 without BOM,每个文件扣5分"; | ||
exports.check = function (source, callback) { | ||
var score = 0; | ||
var info = []; | ||
var counter = 0; | ||
//遍历源目录,忽略黑名单,挨个检测BOM。 | ||
try { | ||
walk(source, function (file, next, context) { | ||
if (!blackListReg.test(file)) { | ||
if (checkBOM(file)) { | ||
score -= 5; | ||
info.push("file:" + file.replace(source, "") + " has utf-8 BOM, please remove it !"); | ||
} | ||
var walker = new Walker({ | ||
filterDir: ignores, | ||
limit: 10 | ||
}); | ||
walker.walk(source); | ||
walker.on('file', function (filename) { | ||
counter++; | ||
piper.push(checkBOM, filename, function (err, isBOM) { | ||
if (isBOM) { | ||
score -= 5; | ||
info.push("file:" + filename.replace(source, "") + " has utf-8 BOM, please remove it !"); | ||
} | ||
counter--; | ||
if (counter === 0) { | ||
callback(null, { | ||
score: score, | ||
info: info | ||
}); | ||
} | ||
next.call(context); | ||
}); | ||
} catch (e) { | ||
callback(e); | ||
} | ||
return callback(null, { | ||
score: score, | ||
info: info | ||
}); | ||
walker.on('end', function (totalFile) { | ||
if (totalFile === 0) { | ||
callback(null, { | ||
score: score, | ||
info: info | ||
}); | ||
} | ||
}); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters