我在Win32上使用GNU Emacs。如何在emacs for Windows中运行jslint作为JavaScript编译工具?
我想能够运行jslint作为.js文件的编译,然后单步执行jslint报告的错误。
我有jslint,WScript版本。
我在Win32上使用GNU Emacs。如何在emacs for Windows中运行jslint作为JavaScript编译工具?
我想能够运行jslint作为.js文件的编译,然后单步执行jslint报告的错误。
我有jslint,WScript版本。
编辑 - 现在有一个简化的模块,为您做到这一点。
http://marmalade-repo.org/packages/fly-jshint-wsh
这.el包:
简单易行。尽管如此,仍然是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"));
}
}}}());
这种变化做了两两件事:
第一次更改允许您从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。
一些使用Perl, jslint, cygwin, EmacsW32.什么乱七八糟的对我的设置注意事项!
JSLint不再支持WSH。我刚刚添加instructions EmacsWiki 在Windows上使用Node.js设置JSLint。
可能是一个更好的选择flymake是Flycheck,为此,我还提供了instructions on EmacsWiki关于如何与JSLint的设置。
安装Node.js。
对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
测试的JSLint从Emacs的内置外壳EShell:
$ ~/.emacs.d/jslint.bat
No files specified.
[...]
安装flymake-jslint及其依赖flymake-easy。
添加到~/.emacs
:
(require 'flymake-jslint)
(add-hook 'js-mode-hook 'flymake-jslint-load)
自定义flymake-jslint-command
:~/.emacs.d/jslint.bat
可选自定义其他flymake-JSLint的选择。
重新启动Emacs以确保一切正常。
通过打开有缺陷的JavaScript文件进行测试。
定制flymake-log-level
并检查*Messages*
缓冲器。
检查flymake-jslint-args
。
确保在flymake-jslint-command
中配置的命令在EShell中运行。
如果您使用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)))))