Al igual que para otros lenguajes, en javascript existen también herramientas para el análisis estático de código. A los desarrolladores de la plataforma .net les será conocido fxcop,  bueno, el objetivo es el mismo: aumentar la calidad de código.

Este tipo de herramientas toman el código de fuente, y dependendiendo de un set de reglas, nos indican cuáles de éstas estamos rompiendo, de forma que podamos identificar más fácilemente esas ‘cosas raras’ que uno escribe y que potencialmente están atentando contra la calidad del código.

JSLint will hurt your feelings

Si, es cierto. Su misma página, y su propio creador lo proclaman. JSLint ( http://www.jslint.com ) es una herramienta desarrollada por douglas crockford (escribí dos posts y en los dos lo referencié.. Y?? CUAL HAY??) que está escrita en javascript.

Para hacer nuestra primera prueba, todo lo que hay que hacer es dirigirse a la página y pegar allí el código, hacer los cambios necesarios en la configuración y presionar el botón JSLint. Luego de eso se produce el momento en el que se muestran los resultados y usted comienza a maldecir a crockford, a este blog y a javascript.

Bart en la casa del arbol.

Este soy yo momentos antes de correr jslint por primera vez. NOTA: acto seguido la mina le saca el corazón.

La realidad es que hay que tomarlo con calma y empezar a analizar los mensajes. JSLint está diseñado para evitar que utilicemos las cosas malas del lenguaje. Con cosas malas hablamos de cosas como variable globales, uso de eval, mal uso de operadores, y demás yerbas ..

Este es un ejemplito de algo del output para el monthpicker plugin posteado unos días atrás:
<br /> Problem at line 10 character 17: 'myParams' was used before it was defined.<br /> myParams = jQuery.extend({
<br /> Problem at line 37 character 22: Unexpected ';'.<br /> };

Problem at line 50 character 43: Expected '===' and instead saw '=='.<br /> if ($container.length == 0) {

Bueno, hay muchos más mensajes….En fin, el código del mismo jslint se puede encontrar en github y forkearlo.

Así fue como nació JSHint, cuyo objetivo es el mismo, pero que basa esas ‘cosas malas del lenguaje’ no solo en la opinión de una persona, sino en  la comunidad. La herramienta es mucho más configurable que la anterior, y también está en github. Ahí se pueden crear issues si se encuentra que hay alguna regla que falta o que debería ser modificada, proponer incluir mejoras,  y palpar un poco más todo este sentido de comunidad.

JSHint también está disponible como un paquete de node, se puede agregar a nuestros scripts de integración continua, pero eso lo dejamos para más adelante.