Question

J'utilise une application source fermée qui charge les scripts Lua et permet une certaine personnalisation en modifiant ces scripts. Malheureusement, cette application n'est pas très bon à générer une sortie de journal utile (tout ce que je reçois est « du script a échoué ») si quelque chose va mal dans l'un des scripts Lua.

Je me rends compte que les langages dynamiques sont à peu près résistant à l'analyse de code statique de la manière C ++ code peut être analysé par exemple.

J'espérais bien, il y aurait un outil qui passe par un script Lua et par exemple met en garde contre les variables qui ne sont pas définies dans le cadre d'un script particulier.

Essentiellement ce que je suis à la recherche est un outil qui pour un script:

local a
print b

affichera:

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

Il ne peut vraiment être mises en garde pour la plupart des choses, mais qui serait encore utile! Est-ce qu'un tel outil existe? Ou peut-être un IDE Lua avec une fonction comme la construction dans?

Merci, Chris

Était-ce utile?

La solution

Analyse statique de code automatisé pour Lua n'est pas une tâche facile en général. Cependant, pour un nombre limité de problèmes pratiques, il est tout à fait faisable.

href="http://www.google.ru/search?q=lua+lint" rapide googler "peluches lua" donne ces deux outils: lua-checker et Lua peluches .

Vous pouvez rouler votre propre outil pour vos besoins spécifiques cependant.

Metalua est l'un des outils les plus puissants pour l'analyse statique de code Lua. Par exemple, s'il vous plaît voir metalint , l'outil pour une utilisation variable globale analyse.

S'il vous plaît ne pas hésiter à poser votre question sur Metalua liste de diffusion . Les gens y sont généralement très utiles.

Autres conseils

Il y a aussi lua-inspection , qui est basé sur metalua qui a déjà été mentionné. Je l'ai intégrée dans ZeroBrane studio IDE , qui génère une sortie très similaire à ce que vous attendez. Voir cette réponse SO pour plus de détails. https://stackoverflow.com/a/11789348/1442917

Pour la vérification globals, consultez cette annonce lua-l . Vérification de la population locale est plus difficile.

Vous devez trouver un analyseur syntaxique pour lua (devrait être disponible en open source) et l'utiliser pour analyser le script dans un arbre AST approprié. Utilisez cet arbre et un simple suivi de visibilité variable pour savoir quand une variable est ou non définie.

En général, les règles de cadrage sont simples:

  • commencer avec le noeud d'AST supérieure et une portée vide
  • article regarder les déclarations de l'enfant pour ce nœud. Toute déclaration variable doit être ajoutée dans le périmètre actuel.
  • si un nouveau champ d'application commence (par exemple via un {opérateur) créer une nouvelle portée des variables héritant des variables dans le périmètre actuel).
  • lorsqu'un champ est fin (par exemple via}) retirer la portée des variables de l'enfant en cours et retourner au parent.
  • itérer soigneusement.

Cela vous donnera les variables sont visibles où l'intérieur de l'AST. Vous pouvez utiliser ces informations et si vous inspectez également les expressions nœuds AST (lecture / écriture des variables), vous pouvez trouver vos informations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top