Ответ 1
РЕДАКТИРОВАТЬ - Там теперь упрощенный модуль, который делает это для вас.
http://marmalade-repo.org/packages/fly-jshint-wsh
Этот .el пакет:
- загружает jshint или jslint для вас (настраивается)
- применяет необходимые WSH-дружественные модификации, которые я опишу ниже
- сохраняет измененный результат во временный файл
- вызывает этот скрипт через flymake в буферах js-mode
Очень просто. Тем не менее Windows только.
Я сохранил все старые части этого ответа по причинам исторического интереса, но вам не нужно читать дальше.
Примечание. Ниже я опишу, как изменить jslint.js для использования в emacs.
Если вы не хотите делать это самостоятельно, доступен уже измененный код.
Эта ссылка содержит дополнительную часть, flymake-for-jslint-for-wsh.el, которая позволяет вам использовать jslint с flymake в Windows.
Чтобы использовать jslint в Emacs,
Загрузите jslint.js, версию WScript.
Отредактируйте файл 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"));
}
}}}());
Это изменение делает две вещи:
- позволяет указать файл для запуска lint в командной строке, а не как stdin. Stdin все еще работает, если файл не указан вообще.
- выдает сообщения об ошибках в формате, который больше похож на большинство компиляторов C/C++.
Первое изменение позволяет вам вызывать jslint.js из Emacs с помощью Mx compile
. Второе позволяет вам интерпретировать сообщения об ошибках с помощью Mx 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 установите команду compile:
(setq compile-command
(let ((file (file-name-nondirectory buffer-file-name)))
(concat "%windir%\\system32\\cscript.exe \\LOCATION\\OF\\jslint-for-wsh.js " file)))
Это.
Когда вы затем откроете файл .js и запустите Mx compile
, вы запустите jslint.js в существующем буфере. Вы получите список ошибок, и Mx next-error
работает, как вы ожидаете.
Yipee !!
Вы также можете запустить jslint как средство проверки синтаксиса flymake в Linux или Windows. См. Http://www.emacswiki.org/emacs/FlymakeJavaScript для деталей.