2010-03-17 14 views

Respuesta

9

EDIT - Ahora hay un módulo simplificado que hace esto por usted.

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

Este paquete .el:

  • descargas jshint o JSLint para usted (configurable)
  • aplica las modificaciones necesarias WSH-amigable que describo a continuación
  • guarda el resultado modificado para un archivo temporal
  • invoca ese script a través de flymake en búferes js-mode

Easy peasy. Sin embargo, solo Windows.

Guarde todas las partes antiguas de esta respuesta por razones de interés histórico, pero no es necesario que siga leyendo.


Nota - A continuación voy a describir cómo modificar jslint.js para su uso dentro de emacs.
Si no desea hacerlo usted mismo, el already-modified code required is available.
Ese enlace tiene una pieza adicional, flymake-for-jslint-for-wsh.el, que le permite usar jslint con flymake en Windows.


Para utilizar JSLint emacs,

Descargar jslint.js, the WScript version.

Edite el archivo jslint.js. Desplazarse hasta la parte inferior y encontrar esto:

(function(){if(!JSLINT(WScript.StdIn.ReadAll(),..... 

Reemplazar eso (y todo lo que sigue) con esto:

(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")); 
      } 
     }}}()); 

Este cambio hace dos cosas:

  1. le permite especificar el archivo para ejecutar pelusa, en la línea de comandos, en lugar de como stdin. Stdin todavía funciona si no se especifica ningún archivo.
  2. emite los mensajes de error en un formato que es más similar a la mayoría de los compiladores de C/C++.

El primer cambio le permite invocar jslint.js desde dentro de emacs con M-x compile. El segundo le permite intervenir los mensajes de error con M-x next-error.

Guarde ese archivo en jslint-for-wsh.js

Luego, en su init.el o emacs.el, añadir a su compilation-error-regexp-alist, con esta expresión regular:

;; JSLINT 
("^[ \t]*\\([A-Za-z.0-9_: \\-]+\\)(\\([0-9]+\\)[,]\\(*[0-9]+\\))\\(Microsoft JScript runtime error\\| JSLINT\\): \\(.+\\)$" 1 2 3) 

En su gancho modo de JavaScript, establecer el mandato de compilación:

(setq compile-command 
     (let ((file (file-name-nondirectory buffer-file-name))) 
     (concat "%windir%\\system32\\cscript.exe \\LOCATION\\OF\\jslint-for-wsh.js " file))) 

Eso es todo.


Cuando a continuación, abre un archivo .js, y ejecutar M-x compile, que se ejecutará jslint.js en el búfer existente. Obtendrá una lista de errores, y M-x next-error funciona como espera.

alt text http://i40.tinypic.com/10nclxv.jpg

Yipee !!

También puede ejecutar jslint como la herramienta del verificador de sintaxis flymake, en Linux o Windows. Ver http://www.emacswiki.org/emacs/FlymakeJavaScript para más detalles.

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

1

JSLint ya no es compatible con WSH. Acabo de agregar instructions a EmacsWiki para configuración de JSLint con Node.js en Windows.

actualización

Posiblemente una mejor alternativa a Flymake es Flycheck, por lo cual también proporcionó instructions on EmacsWiki con respecto a cómo configurarlo con JSLint.

Pasos

  1. Instalar Node.js.

  2. instalar el paquete JSLint para Node.js:

    C:\>npm -g install jslint 
    

    En Windows existe an issue con llamar JSLint de Emacs 23. Por lo tanto, crear un contenedor ~/.emacs.d/jslint.bat(JSLint necesita ser parte del archivo nombrar):

    @ECHO OFF 
    node "%APPDATA%"\npm\node_modules\jslint\bin\jslint.js >"%TEMP%"\jslint.out 2>&1 %* 
    TYPE "%TEMP%"\jslint.out 
    
  3. prueba JSLint de Emacs construido con cáscara EShell:

    $ ~/.emacs.d/jslint.bat 
    No files specified. 
    [...] 
    
  4. Instalar flymake-jslint y su dependencia flymake-easy.

  5. Añadir a ~/.emacs:

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

  7. personalizar Opcionalmente otras opciones Flymake-JSLint.

  8. Reinicie Emacs para asegurarse de que todo se carga bien.

  9. Pruebe abriendo un archivo JavaScript defectuoso.

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

Solución de problemas

  • Personalizar flymake-log-level e inspeccionar el tampón *Messages*.

  • Verificar flymake-jslint-args.

  • Asegúrese de que el comando configurado en flymake-jslint-command se ejecuta en EShell.

0

Si utiliza instalado con Node.js JSHint, puede, por ejemplo, ejecutar

M-x compile jshint --reporter unix --verbose *.js.

O, añadir a su archivo .emacs:

(add-hook 'js-mode-hook 
    (lambda() (setq compile-command 
     (concat "jshint --reporter unix --verbose " 
       (file-name-nondirectory buffer-file-name))))) 
Cuestiones relacionadas