Я использую GNU Emacs на Win32.
Я хочу иметь возможность запускать jslint как компиляцию в .js файлах, а затем выполнять ошибки, которые сообщают jslint.
У меня есть jslint, версия WScript.
Я использую GNU Emacs на Win32.
Я хочу иметь возможность запускать jslint как компиляцию в .js файлах, а затем выполнять ошибки, которые сообщают jslint.
У меня есть jslint, версия WScript.
РЕДАКТИРОВАТЬ - Там теперь упрощенный модуль, который делает это для вас.
http://marmalade-repo.org/packages/fly-jshint-wsh
Этот .el пакет:
Очень просто. Тем не менее 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"));
}
}}}());
Это изменение делает две вещи:
Первое изменение позволяет вам вызывать 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 для деталей.
JSLint больше не поддерживает WSH. Я добавил инструкции в EmacsWiki для настройка JSLint с помощью Node.js в Windows.
Возможно, лучшей альтернативой flymake является Flycheck, для которого я также предоставил инструкции по EmacsWiki относительно того, как настроить его с помощью JSLint.
Установите Node.js.
Установите пакет jslint для Node.js:
C:\>npm -g install jslint
В Windows есть проблема с вызовом jslint из EMACS 23. Таким образом, создайте
wrapper ~/.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.
Некоторые заметки о моей настройке с использованием Perl, jslint, cygwin, EmacsW32. Какой беспорядок!
Если вы используете JSHint, установленный с Node.js, вы можете, например, запустить
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)))))