¿Hay herramientas de análisis estático de JavaScript? [cerrado]


Estoy acostumbrado a que mi compilador se queje cuando hago algo estúpido como un error tipográfico en un nombre de variable, pero JavaScript tiene la costumbre de dejar pasar esto.

¿Hay herramientas de análisis estático para JavaScript?

Author: mido, 2009-02-11

13 answers

Estoy de acuerdo en que JSLint es el mejor lugar para comenzar. Tenga en cuenta que JavaScript Lint es distinto de JSLint. También sugeriría revisar JSure , que en mis pruebas limitadas hizo mejor que cualquiera de ellos, aunque con algunos bordes ásperos en la implementación: la versión de Intel para Mac se estrelló en el inicio para mí, aunque la versión de PowerPC funcionó bien incluso en Intel, y la versión de Linux también funcionó bien. (El desarrollador, Berke Durak, dijo que me llamaría cuando esto fuera arreglado, pero no he sabido nada de él.)

No esperes tanto del análisis estático de JavaScript como de un buen comprobador de C. Como me dijo Durak ," cualquier análisis no trivial es muy difícil debido a la naturaleza dinámica de Javascript."

(Otro error aún más oscuro solo para Mac, esta vez con el widget Konfabilator de JSLint: Arrastrar un icono de documento BBEdit al widget mueve el documento a la papelera. El desarrollador, Douglas Crockford, no había probado el widget en una Mac.)

10 de agosto de 2009: Hoy en el Static Analysis Symposium, Simon Holm Jensen presentó un documento sobre TAJS: Type Analyzer for JavaScript, escrito con Anders Møller y Peter Thiemann. El documento no menciona las herramientas anteriores, pero Jensen me dijo que había mirado algunas de ellas y no estaba impresionado. El código para TAJS debería estar disponible en algún momento de este verano.

 45
Author: Flash Sheridan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-14 04:54:47

RESPUESTA ACTUALIZADA, 2017: Sí. Usa ESLint. http://eslint.org


Además de JSLint (ya mencionado en Flash Sheridan's answer) y el compilador de cierre (anteriormente mencionado en awhyte's answer) También he obtenido muchos beneficios de ejecutar JSHint y PHP CodeSniffer. A partir de 2012, las cuatro herramientas son libres de código abierto y tienen una gran y activa comunidad de desarrolladores detrás de ellos. Son cada uno un poco diferente (y creo, complementario) en los tipos de comprobaciones que realizan:

JSLint fue diseñado para ser, y sigue siendo la herramienta personal de linting de Douglas Crockford. Viene con un gran conjunto de reglas por defecto own propio de Crockford, constantemente actualizado a medida que continúa aprendiendo sobre JavaScript y sus trampas. JSLint es altamente obstinado y esto es generalmente visto como algo bueno. Así que hay (intencionalmente) un cantidad limitada puede hacer para configurar o deshabilitar reglas individuales. Pero esto puede hacer que sea difícil aplicar JSLint al código heredado.

JSHint es muy similar a JSLint (de hecho, comenzó su vida como JSLint fork), pero es más fácil/posible configurar o deshabilitar todas las comprobaciones de JSLint a través de opciones de línea de comandos o .jshintrc file .

Me gusta particularmente que puedo decirle a JSHint que informe todos de los errores en un archivo, incluso si hay cientos de errores. Por el contrario, aunque JSLint tiene una opción de configuración maxerr, generalmente se rescata relativamente pronto cuando se intenta procesar archivos que contienen un gran número de errores.

El compilador de Closure es extremadamente útil porque, si code no compilacon Closure, puede sentirse muy seguro de que dicho código está profundamente conectado de alguna manera fundamental. Compilación de cierre es posiblemente la cosa más cercana que hay en el JS del mundo a un" intérprete " comprobación de sintaxis como php -l o ruby -c

Cierre también le advierte sobre posibles problemas tales como parámetros faltantes y variables no declaradas o redefinidas. Si no está viendo las advertencias que espera, intente aumentar el nivel de advertencia invocando Closure con una opción de --warning_level VERBOSE

Código PHP puede analizar JavaScript así como PHP y CSS. CodeSniffer se envía con varios estándares de codificación diferentes, (digamos phpcs -i para verlos) que incluyen muchos olfatos útiles para el código JavaScript, incluyendo comprobaciones contra estructuras de control en línea y espacios en blanco superfluos.

Aquí hay una lista de rastreadores de JavaScript disponible en PHP CodeSniffer a partir de la versión 1.3.6 y aquí hay un conjunto de reglas personalizadas que le permitiría ejecutarlos todos a la vez.Usando conjuntos de reglas personalizados, es fácil seleccionar y elegir las reglas que desea aplicar. E incluso puedes escribir tus propios olfatos si usted quiere hacer cumplir un "estilo de casa" particular que no es compatible fuera de la caja. Afaik CodeSniffer es la única herramienta de las cuatro mencionadas aquí que soporta la personalización y creación de nuevas reglas de análisis estático. Una advertencia sin embargo: CodeSniffer es también la ejecución más lenta de cualquiera de las herramientas mencionadas.

 57
Author: Noah Sussman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-24 15:45:31

El compilador JS de "Cierre" de Google produce advertencias y errores configurables en tiempo de compilación. Definitivamente encuentra variables y métodos mal escritos, además de errores de arity. Si estás dispuesto a escribir JSDoc de la manera de Cierre, también puede hacer mucho con la información de tipo.

La herramienta "Compresor" de YUI también puede producir advertencias, pero aún no lo ha probado.

No he tenido mucha suerte con el IDE Aptana, construido sobre Eclipse, pero a otras personas les gusta. Consulte Discusión sobre Desbordamiento de Pila of JS IDEs.

El IDE IntelliJ, que no es gratis la última vez que lo comprobé, tiene un excelente soporte para JS. Detectará y resaltará vars y métodos mal escritos a medida que escribe, y más. También tiene autocompletar.

 20
Author: awhyte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-08 07:51:37

En resumen, JSLint, JSHint, Plato, ESLint, Google Closure-Linter son las herramientas disponibles. Me enfrenté a problemas de instalación al probar Google Closure-Linter para Windows. Pero, menciona en la página web que su soporte para Windows es experimental. Encontré y probé otra herramienta que funciona bien. Aquí está el enlace para ello: http://esprima.org /

Además, este es el enlace de github para la herramienta Esprima: https://github.com/ariya/esprima

 11
Author: user_19,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-08 16:28:33

Probé ESLint y lo encontré bueno..también puede agregar reglas personalizadas allí..Aquí está el repositorio de github: https://github.com/nzakas/eslint y aquí está la introducción: http://www.nczonline.net/blog/2013/07/16/introducing-eslint /

 6
Author: learner_19,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-08 16:01:50

Puedes ver algunas herramientas para el análisis de código estático de JavaScript en este Wiki .

Una herramienta en el Wiki, pero no mencionada en este post, es DeepScan. Su objetivo es encontrar errores de tiempo de ejecución y problemas de calidad en lugar de convenciones de codificación de linters. Cubre también TypeScript, React y Vue.js.

Puedes probarlo para tu proyecto GitHub.

 6
Author: Kangho Kim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-27 12:30:42

Más centrado en la seguridad que la lista de propósito general se puede encontrar en el Wiki de Mozilla en Security / B2G / JavaScript code analysis

El propósito de este documento es recopilar análisis de código JavaScript herramientas adecuadas para incluir en los próximos proyectos de Mozilla o para uso interno.

También hay al menos un producto comercial que hace análisis de seguridad: Burp obtiene nuevas capacidades de análisis de JavaScript

La última versión de Burp incluye un nuevo motor para el análisis estático de código JavaScript. Esto permite a Burp Scanner reportar una serie de nuevas vulnerabilidades, incluyendo:

  • XSS basado en DOM
  • Inyección de JavaScript
  • Inyección SQL del lado del cliente
  • Secuestro de WebSocket
  • Manipulación de la ruta del archivo local
  • Redirección abierta basada en DOM
  • Manipulación de cookies
  • Manipulación del encabezado de solicitud Ajax
  • Negación basada en DOM de servicio
  • Manipulación de mensajes web
  • Manipulación de almacenamiento HTML5
 4
Author: Kevin Hakanson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-03 15:58:28

En el ámbito comercial, Análisis Estático de la Cobertura soporta análisis de JavaScript a partir de la versión 7.7 (mediados de 2015). Con respecto a su pregunta específica sobre errores tipográficos, mi proyecto favorito que aparece en la última versión (8.0, principios de 2016) encuentra errores tipográficos en los nombres de los elementos del programa.

Como desarrollador clave en el proyecto, por favor acepte mi plug desvergonzada: Aunque todavía no es tan maduro como el análisis C/C++ venerado , el análisis JavaScript de Coverity comparte gran parte del mismo motor, con el mismo enfoque en la búsqueda de defectos de alto valor con una baja tasa de informes de defectos falsos positivos. Estamos aumentando nuestro enfoque en encontrar defectos de seguridad en JavaScript (y otros lenguajes), además de encontrar errores de programación generales.

Ahora, aquí hay algunos errores tipográficos que encuentra (error tipográfico exacto dejado como un ejercicio para el lector, para enfatizar lo fácilmente que estos pueden ser pasados por alto):

Fusionar.js: (enlace estable) (último revisión)

Comandos-paquetes-consulta.js: (enlace estable) (última revisión)

Series-pie-tests.js: (enlace estable) (última revisión)

Outline_case.js: (enlace estable) (última revisión)

 4
Author: Peter Dillinger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-14 17:35:44

Me gusta Jslint para este tipo de cosas...

 3
Author: Ishmael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-10 22:49:41

Flow realiza análisis estáticos con y sin anotaciones.

Si necesita anotaciones, la sintaxis es compatible con TypeScript.

Instale el paquete con:

npm install --global flow-bin

También hay algunas herramientas. Echa un vistazo a gulp-flowtype y quizás SublimeLinter-flow

 3
Author: Richard Ayotte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-01 20:45:55

JSAnalyse acaba de ser publicado en codeplex. Es una herramienta que analiza las dependencias entre archivos javascript. Incluso puede definir las dependencias permitidas y JSAnalysis comprueba si las reglas definidas se cumplen o no. Eso permite realizar un seguimiento de las dependencias de javascript incluso en grandes proyectos y tener una arquitectura limpia.

JSAnalyse puede ejecutarse como una herramienta de línea de comandos o configurarse a través del diagrama de capas de Visual Studio. También es fácil de integrar en construcción. Con los check-ins cerrados puede mantener las dependencias bajo control.

Http://jsanalyse.codeplex.com/

 2
Author: tstune,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-29 21:12:05

Nuestro SD ECMAScript CloneDR es una herramienta para encontrar copias exactas y casi perdidas de código duplicado en grandes bases de código fuente JavaScript.

Utiliza la sintaxis del lenguaje para guiar la detección, por lo que encontrará clones a pesar de los cambios de formato, comentarios insertados/eliminados, variables renombradas e incluso algunas instrucciones insertadas/eliminadas.

El sitio tiene un ejemplo CloneDR ejecutar en la biblioteca de cierre de Google.

 1
Author: Ira Baxter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-06 08:19:58

Revelación completa, estoy detrás de esto: http://www.toptensoftware.com/minime que hace minificación, ofuscación y un conjunto razonable de comprobaciones de estilo de pelusa.

 0
Author: Brad Robinson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-25 14:24:21