dojo-util
Version:
Dojo utilities including build system for optimizing JavaScript application performance, and DOH testing tool
143 lines (118 loc) • 4.37 kB
JavaScript
//Checkstyle script for Dojo
var buildTimerStart = (new Date()).getTime();
load("../buildscripts/jslib/logger.js");
load("../buildscripts/jslib/fileUtil.js");
load("checkstyleUtil.js");
//*****************************************************************************
if(arguments[0] == "help"){
print("Usage: \n\tTo generate a HTML report on dojo, dijit and dojox folders use:\n\t\t"
+ "checkstyle \n\t"
+ "To specify a single directory to check in, including all child folders, use:\n\t\t"
+ "checkstyle dir={folderName}\n\t"
+ "To specify directories to ignore, use:\n\t\t"
+ "checkstyle ignoreDirs={folderName1},{folderName2}\n\t"
+ "To specify a list of files to process, use the 'files' parameter, passing a list of space separated files, e.g.\n\t\t"
+ "checkstyle files=\"dojo/_base/Color.js dojo/back.js\"\n\t"
+ "To force the script to fail when a specified file has failed the check, use the 'failOnError' parameter, e.g.\n\t\t"
+ "checkstyle failOnError=true files=\"dojo/_base/Color.js dojo/back.js\"\n\t"
+ "To commit fixes made by the checkstyleReport.html tool, use\n\t\t"
+ "checkstyle commit");
} else if(arguments[0] == "commit"){
runCommit();
} else{
//Convert arguments to keyword arguments.
var kwArgs = convertArrayToObject(arguments);
checkstyle();
var buildTime = ((new Date().getTime() - buildTimerStart) / 1000);
print("Build time: " + buildTime + " seconds");
}
//*****************************************************************************
// Take from old buildUtil.js in 1.6
function convertArrayToObject(/*Array*/ary){
// summary:
// converts an array that has String members of "name=value"
// into an object, where the properties on the object are the names in the array
// member name/value pairs.
var result = {};
for(var i = 0; i < ary.length; i++){
var separatorIndex = ary[i].indexOf("=");
if(separatorIndex == -1){
throw "Malformed name/value pair: [" + ary[i] + "]. Format should be name=value";
}
result[ary[i].substring(0, separatorIndex)] = ary[i].substring(separatorIndex + 1, ary[i].length);
}
return result; //Object
}
//********* Start checkstyle *********
function checkstyle(){
var dirs, i, ignoreDirs;
var reportFile = "./checkstyleData.js";
if(kwArgs.files){
var files = kwArgs.files.split(" ");
for(i = 0; i < files.length; i++){
checkstyleUtil.applyRules("../../" + files[i], fileUtil.readFile("../../" + files[i]));
}
if(checkstyleUtil.errors){
var errors = checkstyleUtil.serializeErrors();
if(kwArgs.failOnError == "true"){
throw Error("Checkstyle failed. \n" + errors);
} else{
print(errors);
}
}
return;
}
if(kwArgs.dir){
dirs = [kwArgs.dir];
} else{
dirs = ["dojo", "dijit", "dojox"];
}
if(kwArgs.ignoreDirs){
ignoreDirs = kwArgs.ignoreDirs.split(",");
}else{
ignoreDirs = [];
}
for(i = 0; i < dirs.length; i++){
var fileList = fileUtil.getFilteredFileList("../../" + dirs[i], /\.js$/, true);
for(var j = 0; j < fileList.length; j++){
if(fileList[j].indexOf("/test") < 0
&& fileList[j].indexOf("/nls") < 0
&& fileList[j].indexOf("/demos") < 0){
var ignore = false;
if(ignoreDirs.length > 0){
for(var k = 0; k < ignoreDirs.length; k++){
if(fileList[j].indexOf(ignoreDirs[k]) > -1){
ignore = true;
break;
}else{
}
}
}
if(!ignore){
checkstyleUtil.applyRules(fileList[j], fileUtil.readFile(fileList[j]));
}
}
}
}
var report = checkstyleUtil.generateReport();
fileUtil.saveUtf8File(reportFile, report);
}
function runCommit(){
var dirs = ["dojo", "dijit", "dojox"];
var committedFiles = [];
for(var i = 0; i < dirs.length; i++){
var fileList = fileUtil.getFilteredFileList("../../" + dirs[i], /\.checkstyle.js$/, true);
for(var j = 0; j < fileList.length; j++){
if(fileList[j].indexOf("/test") < 0
&& fileList[j].indexOf("/nls") < 0
&& fileList[j].indexOf("/demos") < 0){
var fileName = fileList[j].substring(0, fileList[j].length - ".checkstyle.js".length);
fileUtil.saveUtf8File(fileName, fileUtil.readFile(fileList[j]));
fileUtil.deleteFile(fileList[j]);
committedFiles.push(fileName);
}
}
}
print("Committed checkstyle fixes for the following files:\n" + committedFiles.join("\n"));
}
//********* End checkstyle *********