现在的位置: 首页 > 综合 > 正文

对JsLint的改造

2013年05月21日 ⁄ 综合 ⁄ 共 2016字 ⁄ 字号 评论关闭

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编码的文件进行检测,谁有好方法希望告诉一下)。

抱歉!评论已关闭.