質問

私が使っている閉源と負荷Luaスクリプトを一部カスタマイズを変更すためのイントロダクションです。残念ながらその応用にな成できる有用なログ出力(すべて取得しますがスクリプトを失敗しました')の場合で異常が起こったのLuaスクリプト

感動的な言語がかなり耐静的コード解析のC++コードを解析できます。

つくろうと思いましたが、あるいツールを通して作動しLuaスクリプト、など警告していない変数で定義されてい文脈の特定を記述します。

基本的には私が求めていたものであるツールのためのスクリプト:

local a
print b

思い出力:

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

でみられる警告のほとんどのものがただ一層際立ちます。このようなツールがありますか?またはそのユーザIDEの特徴としていますか?

おかげでクリス

役に立ちましたか?

解決

自動静的コード解析のためのLuaるのは容易なことではありません。しかし、限定セットの実際の問題ではなかなか可.

迅速 googlingた"luaリ" 収穫量これら二つのツール: lua-チェッカーLuaリ.

だいたいロール独自のツールお客様の特定のニーズに対応しています。

Metalua 最も強力なツールと静的外のユーザコードの解析.例えば、ご覧ください metalint, のツールのためのグローバル変数使用。

お気軽にご相談ください、との質問が Metaluaメーリングリスト.人を通すのが普通です。

他のヒント

すでに述べたmetaluaに基づいています LUA-検査のもあります。私はあなたが期待するものと非常によく似た出力を生成 ZeroBrane StudioのIDE に、にそれを統合しました。これはSO詳細についてはお答えを参照してください: https://stackoverflow.com/a/11789348/1442917

lua 用のパーサー (オープンソースとして入手可能である必要があります) を見つけ、それを使用してスクリプトを適切な AST ツリーに解析する必要があります。そのツリーと単純な変数可視性トラッカーを使用して、変数が定義されているかどうかを確認します。

通常、スコープ規則は単純です。

  • 最上位の AST ノードと空のスコープから開始します
  • item では、そのノードの子ステートメントを確認します。すべての変数宣言は現在のスコープに追加する必要があります。
  • 新しいスコープが開始される場合 (たとえば、{ 演算子を介して)、現在のスコープ内の変数を継承する新しい変数スコープを作成します。
  • スコープが終了するとき (たとえば、 } 経由)、現在の子変数のスコープを削除し、親に戻ります。
  • 慎重に繰り返します。

これにより、AST 内のどこにどの変数が表示されるかがわかります。この情報を使用することができ、式 AST ノード (変数の読み取り/書き込み) も検査すると、情報を見つけることができます。

scroll top