Domanda

Sto utilizzando un'applicazione closed-source che carica gli script Lua e permette qualche personalizzazione attraverso la modifica di questi script. Purtroppo che l'applicazione non è molto bravo a generare output del log utile (tutto quello che ottiene è 'scrittura fallita') se qualcosa va storto in uno degli script Lua.

Mi rendo conto che i linguaggi dinamici sono più o meno resistenti alle analisi statica del codice nel modo C ++ codice può essere analizzato per esempio.

Speravo, però, ci sarebbe stato uno strumento che attraversa uno script Lua e per esempio avverte sulle variabili che non sono state definite nel contesto di un particolare script.

In sostanza quello che sto cercando è uno strumento che per uno script:

local a
print b

uscita sarebbe:

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

Si può veramente solo essere avvertenze per la maggior parte delle cose, ma che sarebbe comunque utile! Se un tale strumento esiste? O forse un IDE Lua con una caratteristica come quella configurazione in?

Grazie, Chris

È stato utile?

Soluzione

analisi statica del codice automatico per Lua non è un compito facile in generale. Tuttavia, per una serie limitata di problemi pratici è abbastanza fattibile.

googling per "lua lint" produce questi due strumenti: lua-checker e Lua pelucchi .

Si consiglia di rotolare il proprio strumento per le vostre esigenze specifiche tuttavia.

Metalua è uno dei più potenti strumenti per l'analisi del codice Lua statica. Ad esempio, consulta metalint , lo strumento per l'utilizzo variabile globale analisi.

Si prega di non esitare a pubblicare la tua domanda su Metalua mailing list . Le persone ci sono di solito molto utile.

Altri suggerimenti

C'è anche lua-ispezionare , che si basa su metalua che è stato già detto. Ho integrato in ZeroBrane Studio IDE , che genera una potenza molto simile a quello che ci si aspetterebbe. Vedere questo SO rispondere per i dettagli:. https://stackoverflow.com/a/11789348/1442917

Per il controllo globali, vedere questo lua-l invio . Controllo gente del posto è più difficile.

Hai bisogno di trovare un parser per lua (dovrebbe essere disponibile come open source) e utilizzarlo per analizzare lo script in un vero e proprio albero di AST. Utilizzare quell'albero e un semplice inseguitore visibilità variabile per scoprire quando una variabile è o non è definita.

Di solito le regole di scoping sono semplici:

  • inizia con il nodo AST superiore e un ambito vuoto
  • voce guardare le dichiarazioni del bambino per quel nodo. Ogni dichiarazione di variabile deve essere aggiunto nell'ambito corrente.
  • se un nuovo ambito sta iniziando (per esempio tramite un operatore {) creare un nuovo ambito variabile ereditare le variabili nell'ambito corrente).
  • quando un ambito sta finendo (ad esempio mediante}) togliere il bambino corrente scope delle variabili e tornare al genitore.
  • Scorrere con attenzione.

Questo vi fornirà quali variabili sono visibili in cui all'interno della AST. È possibile utilizzare queste informazioni e se si ispezionare anche i nodi espressioni AST (lettura / scrittura di variabili) si possono trovare le informazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top