• 对JsLint的改造


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

  • 相关阅读:
    [记录]MySQL 查询无法导出到文件
    Unity3D 在Update中不要过多地修改Transform 信息
    Unity3D 中 脚本(MonoBehaviour) 生命周期WaitForEndOfFrame需要注意的地方
    RunTime的简单使用
    GIT命令行的使用
    UIImagePickerController和UIAlertController结合使用
    NSSortDescriptor对象进行数组排序
    for..in遍历,枚举器
    Objective
    Objective
  • 原文地址:https://www.cnblogs.com/yzx99/p/1276591.html
Copyright © 2020-2023  润新知