Pregunta

Estoy usando una aplicación de código cerrado que carga los scripts Lua y permite una personalización a través de la modificación de estos scripts. Por desgracia que la aplicación no es muy bueno en la generación de la salida del registro de utilidad (todo lo que consigo es 'guión fallido') si algo va mal en uno de los scripts Lua.

Me doy cuenta de que los lenguajes dinámicos son más o menos resistentes a los análisis de código estático en la forma en código C ++ se puede analizar por ejemplo.

Yo esperaba, sin embargo, habría una herramienta que funciona a través de un script Lua y por ejemplo, advierte acerca de las variables que no han sido definidos en el contexto de un script en particular.

En esencia lo que estoy buscando es una herramienta que para una secuencia de comandos:

local a
print b

seria:

warning: script.lua(1): local 'a' is not used'
warning: script.lua(2): 'b' may not be defined'

Se puede realmente ser advertencias para la mayoría de las cosas, sino que todavía sería útil! ¿Existe una herramienta de este tipo? O tal vez un IDE Lua con una característica como la acumulación de?

Gracias, Chris

¿Fue útil?

Solución

análisis de código estático automatizado para Lua no es una tarea fácil en general. Sin embargo, para un conjunto limitado de problemas prácticos, es bastante factible.

google para "pelusa lua" produce estas dos herramientas: lua ortográfico y Lua pelusa .

Es posible que desee rodar su propia herramienta para sus necesidades específicas sin embargo.

Metalua es una de las herramientas más poderosas para el análisis de código estático Lua. Por ejemplo, consulte metalint , la herramienta para el uso de variables globales análisis.

Por favor, no dude en enviar su pregunta en Metalua lista de correo . La gente por lo general no son muy útiles.

Otros consejos

También hay lua-inspeccionar , que se basa en metalua que ya se ha mencionado. Me he integrado en ZeroBrane Studio IDE , que genera una potencia muy similar a lo que se espera. Ver esta respuesta para los detalles:. https://stackoverflow.com/a/11789348/1442917

Para comprobar globales, ver este lua-contabilización . Comprobación de los locales es más difícil.

Es necesario encontrar un analizador para LUA (debe estar disponible como código abierto) y utilizarlo para analizar la secuencia de comandos en un árbol AST adecuada. Utilizar ese árbol y un simple seguimiento de la visibilidad variable para averiguar cuando una variable es o no está definido.

Por lo general, las reglas de alcance son simples:

  • comenzar con el nodo AST superior y un alcance vacío
  • elemento mirar las declaraciones del niño para ese nodo. Cada declaración de variable debe ser añadido en el ámbito actual.
  • si un nuevo ámbito de aplicación está empezando (por ejemplo a través de un {operador) crear un nuevo ámbito de variable heredar las variables en el ámbito actual).
  • cuando un alcance está llegando a su fin (por ejemplo a través}) eliminar el actual ámbito de las variables niño y volver a la matriz.
  • Iterar con cuidado.

Esto le proporcionará con qué variables son visibles en el interior de la AST. Puede utilizar esta información y si también inspeccionar los nodos expresiones AST (lectura / escritura de variables) se puede encontrar su información.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top