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