Używam GNU Emacs na Win32.Jak mogę uruchomić jslint jako narzędzie do kompilacji javascript w emacs dla Windows?
Chcę móc uruchomić jslint jako kompilację plików .js, a następnie przejrzeć błędy zgłaszane przez jslint.
Mam jslint, wersję WScript.
Używam GNU Emacs na Win32.Jak mogę uruchomić jslint jako narzędzie do kompilacji javascript w emacs dla Windows?
Chcę móc uruchomić jslint jako kompilację plików .js, a następnie przejrzeć błędy zgłaszane przez jslint.
Mam jslint, wersję WScript.
EDIT - Istnieje teraz uproszczony moduł, który robi to za Ciebie.
http://marmalade-repo.org/packages/fly-jshint-wsh
Ten pakiet .el:
Łatwy peasy. Wciąż jednak tylko Windows.
Zachowałem wszystkie stare części tej odpowiedzi ze względów historycznych, ale nie musisz już więcej czytać w artykule .
Uwaga - Poniżej opiszę jak zmodyfikować jslint.js do stosowania w emacs.
Jeśli nie chcesz tego robić samodzielnie, already-modified code required is available.
To łącze ma dodatkowy element, flymake-for-jslint-for-wsh.el, który pozwala na używanie jslint z flymake, w systemie Windows.
Aby korzystać jslint w Emacs
Pobierz jslint.js, the WScript version.
Edytuj plik jslint.js. Przewiń na dół strony i znaleźć to:
(function(){if(!JSLINT(WScript.StdIn.ReadAll(),.....
Wymień że (i wszystko, co następuje), z tego:
(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"));
}
}}}());
Ta zmiana robi dwie rzeczy:
Pierwsza zmiana umożliwia wywołanie jslint.js z poziomu emacs z numerem M-x compile
. Druga pozwala na interpetowanie komunikatów o błędach za pomocą M-x next-error
.
Zapisz ten plik w jslint-for-wsh.js
Następnie w init.el lub emacs.el, dodać do swojej compilation-error-regexp-alist
, tym regexp:
;; JSLINT
("^[ \t]*\\([A-Za-z.0-9_: \\-]+\\)(\\([0-9]+\\)[,]\\(*[0-9]+\\))\\(Microsoft JScript runtime error\\| JSLINT\\): \\(.+\\)$" 1 2 3)
W swoim hakiem trybu JavaScript, ustawić polecenia kompilacji:
(setq compile-command
(let ((file (file-name-nondirectory buffer-file-name)))
(concat "%windir%\\system32\\cscript.exe \\LOCATION\\OF\\jslint-for-wsh.js " file)))
To wszystko.
Po czym otworzyć plik js i uruchom M-x compile
, trafisz jslint.js na istniejącym buforze. Otrzymasz listę błędów i M-x next-error
działa zgodnie z oczekiwaniami.
alt text http://i40.tinypic.com/10nclxv.jpg
Yipee !!
Można także uruchomić jslint jako narzędzie sprawdzania składni flymake, w systemie Linux lub Windows. Aby uzyskać szczegółowe informacje, patrz http://www.emacswiki.org/emacs/FlymakeJavaScript.
Kilka uwag na temat mojej konfiguracji wykorzystujące Perl, jslint, cygwin, EmacsW32. Co za bałagan!
JSLint nie obsługuje już usługi WSH. Właśnie dodałem instructions do EmacsWiki dla konfigurowania JSLint z Node.js w systemie Windows.
Być może lepszym rozwiązaniem do flymake jest Flycheck, dla których ja również instructions on EmacsWiki dotyczącą jak go skonfigurować z JSLint.
Install Node.js.
Zainstaluj pakiet jslint dla node.js:
C:\>npm -g install jslint
W Windows jest an issue z wywołaniem jslint z Emacs 23. W ten sposób stworzyć otoki ~/.emacs.d/jslint.bat
(jslint musi być częścią pliku wymienić):
@ECHO OFF
node "%APPDATA%"\npm\node_modules\jslint\bin\jslint.js >"%TEMP%"\jslint.out 2>&1 %*
TYPE "%TEMP%"\jslint.out
test JSLint z Emacs' zbudowany w skorupkach EShell:
$ ~/.emacs.d/jslint.bat
No files specified.
[...]
Install flymake-jslint i jego zależność flymake-easy.
Dodaj do ~/.emacs
:
(require 'flymake-jslint)
(add-hook 'js-mode-hook 'flymake-jslint-load)
Dostosuj flymake-jslint-command
: ~/.emacs.d/jslint.bat
Opcjonalnie dostosować inne opcje flymake-jslint.
Uruchom ponownie Emacsa, aby upewnić się, że wszystko ładuje się dobrze.
Sprawdź, otwierając wadliwy plik JavaScript.
Dostosuj flymake-log-level
i sprawdzać bufor *Messages*
.
Sprawdź flymake-jslint-args
.
Upewnij się, że polecenie skonfigurowane w flymake-jslint-command
działa w EShell.
Jeśli używasz JSHint zainstalowany z node.js, można na przykład uruchomić
M-x compile jshint --reporter unix --verbose *.js
.
też dodać do pliku .emacs:
(add-hook 'js-mode-hook
(lambda() (setq compile-command
(concat "jshint --reporter unix --verbose "
(file-name-nondirectory buffer-file-name)))))