我在 Win32 上使用 GNU Emacs。
我希望能够将 jslint 作为对 .js 文件的编译运行,然后逐步检查 jslint 报告的错误。
我有 jslint,即 WScript 版本。
我在 Win32 上使用 GNU Emacs。
我希望能够将 jslint 作为对 .js 文件的编译运行,然后逐步检查 jslint 报告的错误。
我有 jslint,即 WScript 版本。
编辑- 现在有一个简化的模块可以为您执行此操作。
http://marmalade-repo.org/packages/fly-jshint-wsh
这个 .el 包:
十分简单。仍然只有 Windows。
出于历史利益的原因,我保留了此答案的所有旧部分,但您无需进一步阅读。
注意- 下面我描述了如何修改 jslint.js 以在 emacs 中使用。
如果你不想自己做,需要的已经修改的代码是可用的。
该链接有一个附加部分,flymake-for-jslint-for-wsh.el,它允许您在 Windows 上将 jslint 与 flymake 一起使用。
要在 emacs 中使用 jslint,
编辑 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 中调用 jslint.js,使用M-x compile
. 第二个允许您使用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
预期工作。
耶!!
您还可以在 Linux 或 Windows 上将 jslint 作为 flymake 语法检查器工具运行。有关详细信息,请参阅http://www.emacswiki.org/emacs/FlymakeJavaScript。
JSLint 不再支持 WSH。我刚刚向 EmacsWiki 添加了关于在 Windows 上使用 Node.js 设置 JSLint 的说明。
Flymake 可能更好的替代品是 Flycheck,为此我还在EmacsWiki 上提供了有关如何使用 JSLint 进行设置的说明。
安装Node.js。
为 Node.js 安装 jslint 包:
C:\>npm -g install jslint
在 Windows 上,从 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
从 Emacs 的内置 shell EShell 测试JSLint:
$ ~/.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 中运行。
关于我使用Perl、jslint、cygwin、EmacsW32设置的一些注意事项。真是一团糟!
如果您使用与 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)))))