2010-03-17 69 views

回答

9

编辑 - 现在有一个简化的模块,为您做到这一点。

http://marmalade-repo.org/packages/fly-jshint-wsh

这.el包:

  • 下载jshint或JSLint的你(配置)
  • 应用必要的WSH友好的修改,我在下面说明
  • 保存修改结果临时文件
  • 通过js模式缓冲区中的flymake调用该脚本

简单易行。尽管如此,仍然是Windows。

由于历史原因,我保留了本答案的所有旧部分,但您无需进一步阅读 。


注意 - 下面我将介绍如何修改jslint.js为Emacs中使用。如果你不想自己做,already-modified code required is available
该链接有一个额外的部分,flymake-for-jslint-for-wsh.el,允许您在Windows上使用jslint和flymake。


使用Emacs内的JSLint,

下载jslint.js, the WScript version

编辑jslint.js文件。滚动到底部,找到这个:

(function(){if(!JSLINT(WScript.StdIn.ReadAll(),..... 

替换(以及随后的一切)与此:

(function(){ 
    var filename = "stdin"; 
    var content= ""; 
    if (WScript.Arguments.length > 0){ 
     filename = WScript.Arguments(0); 
     var fso = new ActiveXObject("Scripting.FileSystemObject"); 
     //var file = fso.GetFile(filename); 
     var fs = fso.OpenTextFile(filename, 1); 
     content = fs.ReadAll(); 
     fs.Close(); 
     fso = null; 
     fs = null; 
    } else { 
     content = WScript.StdIn.ReadAll(); 
    } 
    if(!JSLINT(content,{passfail:false})){ 
     WScript.StdErr.WriteLine("JSLINT"); 
     for (var i=0; i<JSLINT.errors.length; i++) { 
      // sample error msg: 
      // sprintf.js(53,42) JSLINT: Use the array literal notation []. 
      var e=JSLINT.errors[i]; 
      if (e !== null){ 
       var line = (typeof e.line == "undefined")?'0':e.line; 
       WScript.StdErr.WriteLine(filename + '(' +line+','+e.character+') JSLINT: '+e.reason); 
       WScript.StdErr.WriteLine(' ' + (e.evidence||'').replace(/^\s*(\S*(\s+\S+)*)\s*$/,"$1")); 
      } 
     }}}()); 

这种变化做了两两件事:

  1. 允许您指定文件在命令行上运行lint,而不是作为标准输入。如果没有指定文件,Stdin仍然有效。
  2. 以与大多数C/C++编译器更类似的格式发出错误消息。

第一次更改允许您从emacs中使用M-x compile调用jslint.js。第二个允许您将M-x next-error与错误消息进行联系。

将该文件保存到jslint-for-wsh。JS

然后,在你init.el,或emacs.el,添加到您的compilation-error-regexp-alist,这个正则表达式:

;; JSLINT 
("^[ \t]*\\([A-Za-z.0-9_: \\-]+\\)(\\([0-9]+\\)[,]\\(*[0-9]+\\))\\(Microsoft JScript runtime error\\| JSLINT\\): \\(.+\\)$" 1 2 3) 

在JavaScript模式挂钩,设定的编译命令:

(setq compile-command 
     (let ((file (file-name-nondirectory buffer-file-name))) 
     (concat "%windir%\\system32\\cscript.exe \\LOCATION\\OF\\jslint-for-wsh.js " file))) 

就是这样。


当你再打开一个.js文件,并运行M-x compile,您将在现有的缓冲运行jslint.js。你会得到一个错误列表,M-x next-error按照你的预期工作。

alt text http://i40.tinypic.com/10nclxv.jpg

Yipee!

您也可以在Linux或Windows上运行jslint作为flymake语法检查器工具。 有关详细信息,请参阅http://www.emacswiki.org/emacs/FlymakeJavaScript

alt text http://i47.tinypic.com/2mk1eh.jpg

1

JSLint不再支持WSH。我刚刚添加instructions EmacsWiki 在Windows上使用Node.js设置JSLint。

更新

可能是一个更好的选择flymake是Flycheck,为此,我还提供了instructions on EmacsWiki关于如何与JSLint的设置。

步骤

  1. 安装Node.js

  2. 对Node.js的安装包的JSLint:

    C:\>npm -g install jslint 
    

    在Windows上有an issue与调用退出Emacs 23的JSLint因此,创建一个 包装~/.emacs.d/jslint.bat(JSLint的需要是文件的一部分名):

    @ECHO OFF 
    node "%APPDATA%"\npm\node_modules\jslint\bin\jslint.js >"%TEMP%"\jslint.out 2>&1 %* 
    TYPE "%TEMP%"\jslint.out 
    
  3. 测试的JSLint从Emacs的内置外壳EShell

    $ ~/.emacs.d/jslint.bat 
    No files specified. 
    [...] 
    
  4. 安装flymake-jslint及其依赖flymake-easy

  5. 添加到~/.emacs

    (require 'flymake-jslint) 
    (add-hook 'js-mode-hook 'flymake-jslint-load) 
    
  6. 自定义flymake-jslint-command~/.emacs.d/jslint.bat

  7. 可选自定义其他flymake-JSLint的选择。

  8. 重新启动Emacs以确保一切正常。

  9. 通过打开有缺陷的JavaScript文件进行测试。

    Screenshot of flymake-jslint running in Emacs 23 on Windows XP/SP3

故障排除
  • 定制flymake-log-level并检查*Messages*缓冲器。

  • 检查flymake-jslint-args

  • 确保在flymake-jslint-command中配置的命令在EShell中运行。

0

如果您使用Node.js的安装JSHint,你可以,例如,运行

M-x compile jshint --reporter unix --verbose *.js

或者添加到您的.emacs文件:

(add-hook 'js-mode-hook 
    (lambda() (setq compile-command 
     (concat "jshint --reporter unix --verbose " 
       (file-name-nondirectory buffer-file-name))))) 
相关问题