JsLint对JavaScript代码的检测使得我们错误会更少一些,这样大大节省调试时间(特别对我这种习惯在调试状态边改边写代码的人)
从JsLint主页上下载下来的用于WSH脚本的代码(http://www.jslint.com/wsh/index.html),按如下网页的做法
http://www.cnblogs.com/Pharaoh/archive/2007/07/30/836356.html
仍无法在VS的外部工具中使用。
使用时,会提示:
Microsoft JScript 运行时错误: 输入超出了文件尾
应该是Pharaoh对JsLint有进行修改。但文中提供的链接已经不可使用了。因此只好自己试一下看。
要调试JsLint.js,可以在参看cscript的帮助说明,只要参数后面加上一个//x,即可,为了更快一些,我在
(function()
{
if(!JSLINT(WScript.StdIn.ReadAll(), {passfail:true}))
{
var e=JSLINT.errors[0];
WScript.StdErr.WriteLine('Lint at line '+(e.line+1)+' character '+(e.character+1)+': '+e.reason);
WScript.StdErr.WriteLine((e.evidence||'').replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1"));
WScript.Quit(1);
}
})();
的第一句之前加上debugger;
调试后发现出错是在WScript.StdIn.ReadAll()这一句,可能它对命令行
cscript jslint.js <myprogram.js
是可行的,对VS的外部工具则是不行的。外部工具中,当前的文件会做为一个参数传进去。因此我把代码改为如下:
(
function()
{
//只读常量
var ForReading = 1;
var TristateTrue = -1; //以 Unicode 格式打开文件。
var TristateFalse = 0; //以 ASCII 格式打开文件。
//使用FileSystemObject对象
//检查文件是什么编码保存的
var fso = new ActiveXObject("Scripting.FileSystemObject");
//以只读方式打开 第一个参数所指的文件
var ts = fso.OpenTextFile(WScript.Arguments(0), ForReading, false, TristateFalse);
var i1=ts.Read(1).charCodeAt(0);
var i2=ts.Read(1).charCodeAt(0);
if (i1==0xF8F5)
ts = fso.OpenTextFile(WScript.Arguments(0), ForReading, false, TristateTrue);
else if (i1=0x9518)
{
//?
ts = fso.OpenTextFile(WScript.Arguments(0), ForReading, false, TristateTrue);
}
else
ts = fso.OpenTextFile(WScript.Arguments(0), ForReading, false, TristateFalse);
debugger;
//把它全部读进来
var s=ts.ReadAll();
//让JSLINT检查,其中出现错误后仍要继续检查
if (!JSLINT(s, {passfail:false}))
{
//对所有错误一次性报告(原来的只报告一个错误)
for (var i=0; i<JSLINT.errors.length; i++)
{
var e=JSLINT.errors[i];
//这种输入格式可能会让VS具有双击自动定位的功能
WScript.StdErr.WriteLine(WScript.Arguments(0)+"("+(e.line+1)+','+(e.character+1)+'): '+e.reason);
//输出错误的语句
WScript.StdErr.WriteLine((e.evidence||'').replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1"));
}
WScript.StdErr.WriteLine("检查完成!");
WScript.Quit(1);
}
else
{
WScript.StdOut.WriteLine(WScript.Arguments(0)+" : 没有错误!");
WScript.Quit(0);
}
}
)();
这样就可以用了,(无法对UTF-8编码的文件进行检测,谁有好方法希望告诉一下)。