Frage

Ich bin mit einem Closed-Source-Anwendung, die Lua-Skripten lädt und ermöglicht eine gewisse Anpassung durch diese Skripte modifizieren. Leider, dass die Anwendung zu generieren nützliche Protokollausgabe nicht sehr gut ist (alles, was ich bekommen ist ‚script failed‘), wenn etwas in einen der Lua-Skripten schief geht.

Ich weiß, dass dynamische Sprachen ziemlich resistent gegen statische Code-Analyse in der Art und Weise C ++ Code zum Beispiel analysiert werden kann.

Ich hatte gehofft, aber wäre es ein Tool sein, dass ein Lua-Skript läuft durch und z.B. warnt vor Variablen, die nicht im Zusammenhang mit einem bestimmten Skript definiert haben.

Im Wesentlichen für das, was ich suche, ist ein Werkzeug, das für ein Skript:

local a
print b

ausgeben würde:

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

Es kann nur wirklich Warnungen für die meisten Dinge, aber das wäre noch nützlich sein! Ist ein solches Werkzeug existieren? Oder vielleicht ein Lua IDE mit einem Feature, wie die Build-in?

Danke, Chris

War es hilfreich?

Lösung

Automatische statische Code-Analyse für Lua ist keine leichte Aufgabe, im Allgemeinen. Doch für eine begrenzte Anzahl von praktischen Problemen ist es durchaus machbar.

googeln diese beiden Tools ergibt: lua-checker und Lua Flusen .

Sie möchten Ihr eigenes Werkzeug für Ihre spezifischen Bedürfnisse jedoch rollen.

Metalua ist eines der mächtigsten Werkzeuge für die statische Codeanalyse Lua. Zum Beispiel finden Sie unter metalint , das Werkzeug für die globale Variable Nutzung Analyse.

Bitte zögern Sie nicht, Ihre Frage zu stellen auf Metalua Mailingliste . Die Menschen dort sind in der Regel sehr hilfreich.

Andere Tipps

Es gibt auch lua-inspizieren , die auf metalua basiert, die bereits erwähnt wurde. Ich habe es integriert in ZeroBrane Studio IDE , die eine Ausgabe sehr ähnlich erzeugt, was man erwarten würde. Sehen Sie diese SO Details beantworten. https://stackoverflow.com/a/11789348/1442917

Globals Zur Kontrolle finden Sie unter diesem lua-l Eintrag . Überprüfen Einheimischen ist härter.

Sie benötigen einen Parser für lua zu finden (sollte als Open Source verfügbar sein) und es verwendet, um das Skript in einen richtigen AST Baum zu analysieren. Verwenden Sie den Baum und eine einfache Tracker variable Sichtbarkeit, um herauszufinden, wenn eine Variable ist oder nicht definiert ist.

Normalerweise sind die Scoping-Regeln sind einfach:

  • beginnt mit dem Top-AST-Knoten und einem leeren Rahmen
  • suchen Artikel in den untergeordneten Anweisungen für diesen Knoten. Jede Variable Erklärung sollte im aktuellen Bereich hinzugefügt werden.
  • , wenn ein neuer Rahmen beginnt (beispielsweise über einen {Operator) erstellen Sie einen neuen Variable Umfang die Variablen im aktuellen Bereich vererben).
  • , wenn ein Bereich endet (zum Beispiel über}) Variable Umfang des aktuellen Kind entfernen und an den Eltern zurück.
  • Iterate sorgfältig.

Dies wird Ihnen mit dem, was Variablen sind sichtbar, wo innerhalb der AST. Sie können diese Informationen benutzen, und wenn Sie auch die Ausdrücke AST-Knoten (Lesen / Schreiben von Variablen) überprüfen Sie Ihre Informationen herausfinden können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top