2010-03-17 6 views

Odpowiedz

9

EDIT - Istnieje teraz uproszczony moduł, który robi to za Ciebie.

http://marmalade-repo.org/packages/fly-jshint-wsh

Ten pakiet .el:

  • pliki do pobrania jshint lub jslint dla Ciebie (konfigurowalne)
  • stosuje niezbędne modyfikacje WSH w obsłudze opiszę poniżej
  • zapisuje zmodyfikowany wynik plik tymczasowy
  • wywołuje ten skrypt za pomocą flymake w buforach js-mode

Ł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:

  1. umożliwia określenie plik do uruchomienia lint, w linii poleceń, a nie jako standardowe wejście. Stdin nadal działa, jeśli w ogóle nie określono żadnego pliku.
  2. emituje komunikaty o błędach w formacie, który jest bardziej podobny do większości kompilatorów C/C++.

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.

alt text http://i47.tinypic.com/2mk1eh.jpg

1

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.

Aktualizacja

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.

Kroki

  1. Install Node.js.

  2. 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 
    
  3. test JSLint z Emacs' zbudowany w skorupkach EShell:

    $ ~/.emacs.d/jslint.bat 
    No files specified. 
    [...] 
    
  4. Install flymake-jslint i jego zależność flymake-easy.

  5. Dodaj do ~/.emacs:

    (require 'flymake-jslint) 
    (add-hook 'js-mode-hook 'flymake-jslint-load) 
    
  6. Dostosuj flymake-jslint-command: ~/.emacs.d/jslint.bat

  7. Opcjonalnie dostosować inne opcje flymake-jslint.

  8. Uruchom ponownie Emacsa, aby upewnić się, że wszystko ładuje się dobrze.

  9. Sprawdź, otwierając wadliwy plik JavaScript.

    Screenshot of flymake-jslint running in Emacs 23 on Windows XP/SP3

problemów

  • 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.

0

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))))) 
Powiązane problemy